2

我很抱歉我的错字。我正在开发概念证明 C# ASP.NET MVC 应用程序,当没有 post 和 get 时,我需要在两个视图之间传递数据。一个视图启动一个模态对话框,我需要它们之间的通信。我们正在使用 JQuery。

我有一个带有数据网格的名为 Charges.cshtml 的视图。数据网格的第一列可能有 span 元素或 link 元素,这取决于一个属性,该属性将告诉电荷是具有单个描述还是多个描述。视图如下所示。

收费

如果费用有多个描述,用户将单击相应的描述链接(在这种情况下为 Description2),然后将打开一个模式对话框,显示各种描述,如下所示

多重描述

现在在此模式对话框中,用户将确认/选择一个描述。现在我需要关闭模式对话框并更新所选费用的描述,如下所示

更新说明

这里的难点是如何在两个视图之间传递数据。我可以通过控制器或通过 javascript 传递数据。

我尝试了各种方法将 Charges.cshtml 中的选定费用传递给 LoanCharge 控制器中的 LoadLoanChargeDescriptions 方法,例如 json 序列化、ViewData、ViewBag、TempData 等,但没有用。我可以传递简单的数据类型,如 int、string、float 但不能传递整个对象。我觉得我需要将 CurrentDescription 和 Descriptions 传递给我的控制器,并且我需要从它们转移到其他部分。我试图传递字符串列表,但看不到如何在控制器中访问它们,因为我在控制器中计数为 0。我可以打开多个描述 UI 的弹出窗口(现在只添加了 Hello 文本)

请参阅下面的代码片段

费用.cshtml

@model ChargeViewModel
@using (Html.FAFBeginForm())
{
    <div>
            <table>
                <tbody>
                <tr >                   
                    //.....                     
                    <td>
                        @if(Model.IsMultipleMatch)
                        {
                            var loanCharge = Model as ChargeViewModel;
                            if (loanCharge.IsMultipleMatch == true)
                            {
                                //string vm = @Newtonsoft.Json.JsonConvert.SerializeObject(loanCharge);                                                                             
                                <span>
                                    <a 
onclick="ShowMatchingDescriptions('@Url.Action("LoadLoanChargeDescriptions", "LoanCharge")','', '920','500')">
                                        @loanCharge.Description
                                    </a>
                                </span>    
                             }                        
                        }
                        else
                        {
                            <span>Model.Description</span>
                        }  

                    </td>
                </tr>                     
                </tbody>    
            </table>
    </div> 
}

public class ChargeViewModel
{
  public string Description {get;set;}
  public bool IsMultipleMatch {get;set;}
  public List<string> Descriptions {get;set;}
}

public class LoanChargeController
{
  public ActionResult LoadLoanChargeDescriptions()
  {
      // get data here and pass/work on
      return View("_PartialMultipleMatchPopup", null);
  }
}

在 Review.js 中

function ShowMatchingDescriptions(popUpURL, windowProperties, w, h) {
    try {                
        var left = (screen.width / 2) - (w / 2);
        var top = (screen.height / 2) - (h / 2);

        var properties = windowProperties + "dialogwidth:" + w + "px;dialogheight:" + h + "px;dialogtop:" + top + "px;dialogleft:" + left + "px;scroll:yes;resizable:no;center:yes;title:Matching Lender’s Fee;";
        $.when(
        window.showModalDialog(popUpURL, window, properties)
        )
        .then(function (result) {
            var childWindow = result;
        });
    }
    catch (err) {
        alert("Error : " + err)
    }
}

更新 1

我更新了我的问题并发布了更多详细信息。

提前致谢。

更新 2

请在下面的链接中查看我的解决方案。

父窗口和子窗口之间的 MVC 传递模型

4

1 回答 1

1

为什么不使用 AJAX 来传递数据?

    function ChargeViewModel() {
        this.Description ='';
        this.IsMultipleMatch =false;

    }

    var chargeViewModel= new ChargeViewModel();
    var data = JSON.stringify({ 'chargeViewModel': chargeViewModel });

    $.ajax({
        contentType: 'application/json; charset=utf-8',
        dataType: 'html',
        type: 'POST',
        url: '@Url.Action("LoadLoanChargeDescriptions", "LoanChargeController")',
        data: data,
        success: function (result) {
           //result will be your partial page html output
        },
        failure: function (response) {

        }
    });

然后你必须像这样更改控制器:

public ActionResult LoadLoanChargeDescriptions(ChargeViewModel chargeViewModel)
  {
      // get data here and pass/work on
      return View("_PartialMultipleMatchPopup", null);
  }

让我知道你有疑问..

于 2016-04-01T06:26:57.967 回答