Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ASP.NET MVC数据绑定视图模型显示JQuery对话框的最佳方法_C#_Javascript_Jquery_Model View Controller_Jquery Ui - Fatal编程技术网

C# 使用ASP.NET MVC数据绑定视图模型显示JQuery对话框的最佳方法

C# 使用ASP.NET MVC数据绑定视图模型显示JQuery对话框的最佳方法,c#,javascript,jquery,model-view-controller,jquery-ui,C#,Javascript,Jquery,Model View Controller,Jquery Ui,想象一下,一个简单的页面上有一个用户列表。选择用户将显示一个JQuery模式对话框,其中包含可编辑的各种详细信息。比如: @model IEnumerable<UserRole> @if (Model.Any()) { foreach (var user in Model.Users) { <a href="#" id="user-details-link" onclick="userDetailsOpen(@user.id)">Detai

想象一下,一个简单的页面上有一个用户列表。选择用户将显示一个JQuery模式对话框,其中包含可编辑的各种详细信息。比如:

@model IEnumerable<UserRole>


@if (Model.Any())
{
    foreach (var user in Model.Users)
    {
      <a href="#" id="user-details-link" onclick="userDetailsOpen(@user.id)">Details</a>
    }
}
同样,它是有效的,但我发现用这种方法有几个大问题:

a) 它打破了我的“把一切都放在一起”的规则。在查看时,如果不进行搜索,其他开发人员将不知道此Div中将加载哪些部分视图

b) 部分视图弹出窗口的所有Java脚本现在都需要在母版页中引用,而不是在部分视图本身中引用

c) 当请求页面时,如果页面很大,则需要一些时间才能显示该页面

底线问题是,您认为在保持代码组织的同时,将模型绑定填充的局部视图显示为模式对话框的最佳方式是什么

我的理想方案是预加载所有部分视图字段,然后在请求对话框显示填充了数据的模型时,将预加载的部分视图绑定到新的JSon数据集,而不加载/重新加载所有部分视图字段。 有办法吗

另外,我尝试过的一件事是使用
@Html.partial(“UserDetails”,new User)
预加载我的部分视图字段,然后使用JQuery
.replaceWith()
方法替换Div内容,但不幸的是,我无法让它工作

任何想法都很感激。没有好主意,因为这是坏主意。
谢谢。

将部分代码加载到partial中,然后使用操作返回更新partial容器,这没什么错

<div id="ParitalContainer">
    @Html.Partial("_PartialView", Model.PartialModel)
</div>

@Html.Partial(“\u PartialView”,Model.PartialModel)

或者,您可以考虑使用JSON数据的场景。也就是说,通过调用

$.ajax
$.getJSON
异步加载所有数据。您的操作结果将返回
JsonResult
,然后您可以只更新所需的元素。
此外,如果您想要更健壮的解决方案,可以考虑使用Knockout.js。如果我想“把一切都放在一起”的话,我会这么做。

谢谢你,托米斯拉夫。例如,我的局部视图包含5个选项卡和数百个字段。在页面加载时呈现一次,然后根据所选链接条件重新加载,这是不对的。你不同意吗?我不确定这是否是最好的方法,但这是我最终选择的道路。
var url = "/MyController/MyAction/" + Id;
$("#palceholder").load(url).dialog('open'); 
<div id="ParitalContainer">
    @Html.Partial("_PartialView", Model.PartialModel)
</div>