我对我的拼写错误感到抱歉。我正在开发概念验证 C# ASP.NET MVC 应用程序,其中我需要在没有 post 和 get 的情况下在两个视图之间传递数据。一个视图启动一个模式对话框,我需要它们之间的通信。我们正在使用 JQuery。
我有一个名为 Charges.cshtml 的视图,带有数据网格。数据网格的第一列可能具有 span 元素或 link 元素,具体取决于
属性将告诉收费是否有单个或多个描述。视图如下所示。
![Charges](https://i.stack.imgur.com/Dxh03.jpg)
如果费用有多个描述,用户将单击相应的描述链接(在本例中为“描述 2”),然后将打开一个模式对话框,显示各种描述,如下所示
![Multiple Descriptions](https://i.stack.imgur.com/Cs7bz.jpg)
现在,在此模式对话框中,用户将确认/选择一个描述。现在我需要关闭模式对话框并更新所选的描述
如下收费
![Updated Description](https://i.stack.imgur.com/dBYrM.jpg)
这里的困难部分是如何在两个视图之间传递数据。我可以通过控制器或 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)
}
}
UPDATE 1
我更新了我的问题并发布了更多详细信息。
提前致谢。
UPDATE 2
请在下面的链接中查看我的解决方案。
父子窗口之间的MVC传递模型