对话框中的MVC 3部分视图不工作
本文关键字:视图 工作 3部 MVC 对话框 | 更新日期: 2023-09-27 17:51:26
我有一个数据表网页,在数据表中显示用户列表。在用户页面上有一个创建新用户的按钮。单击此按钮后,将启动一个模态jQuery对话框,供用户输入新用户的详细信息。有一个取消按钮,它只是关闭对话框和一个保存用户按钮,点击调用DoSaveUser方法在我的控制器。我可以从调试中看到,我进入DoSaveUser方法,如果创建用户成功说用户被保存,它应该在最后返回到一个PartialView。然而,当你输入详细信息时,我的对话框并没有被成功消息所取代——即使用户正在被创建——也就是说,在我点击保存按钮之后——如果我取消对话框并刷新原始用户页面,我可以看到新用户更新的数据表。
UserList页面上的代码(对话框中有更多的字段,而不仅仅是名称,但已删除它们以使问题具有更少的代码)。所以当CreateUser按钮被点击时,我的newUserDialog就启动了。
<div id="newUserDialog">
@using (Html.BeginForm("DoSaveUser", "MyController", FormMethod.Post, new { id = "saveForm" }))
{
<div id="resultContainer">
<table class="ui-widget-content" style="width: 565px; margin-top: 10px;">
<tr>
<td style="width: 100px;">
</td>
<td class="label">
Forename :
</td>
<td class="value">
@Html.TextBoxFor(model => model.Forename, new { style = "width:150px" })
</td>
</tr>
</table>
<div class="ui-widget-content Rounded" style="width: 565px; margin-top: 10px; text-align: center;">
<input id="Cancel" type="button" class="dialog-button" value="Cancel" style="margin: 5px" />
<input id="DoSaveUser" type="submit" class="dialog-button" value="Save User" style="margin: 5px" />
</div>
</div>
}
在被点击的对话框上保存用户的Javascript代码-提交表单。
$(function () {
$('#saveForm').submit(function () {
var formData = $("#saveForm").serializeArray();
$.ajax({
url: this.action,
type: this.method,
data: formData,
dataType: "json",
success: function (result) {
$('#resultContainer').html(result);
}
});
return false;
});
});
现在在我的DoSaveUser方法在我的控制器,我可以设置一个断点,点击并看到所有的值被正确发送到相应的字段-一旦我保存到DB这是返回。
return PartialView("UserSuccess", model);
这是所有的视图包含在cshtml..请注意,我想要的是结果容器Div,其中包含所有我的文本框字段和标签被替换为用户创建成功。然后,我需要在这个页面上点击一个ok,点击将关闭对话框并刷新UserList页面,并显示与新用户更新的数据表。然而,当我点击保存,文本框只是停留在Div和Div没有得到改变-但如果我然后取消对话框,刷新页面,我可以看到数据表更新与我的新用户。我是不是漏掉了什么?(注意-我已经添加了jquery. unobtrusiu -ajax.js到我的_Layout页面)
@model MyProject.Models.UserModel
@{
ViewBag.Title = "UserSuccess";
}
<div id="resultContainer">
User Created Successfully
</div>
你确定你的初始html有一个#resultContainer
div吗?如果你没有
$('#resultContainer').html(result);
行不匹配任何内容。另一方面,如果您这样做,您将得到重复嵌套的#resultContainer
div,这也是一个错误(id必须是唯一的)。
正确的方法是在原始html中添加一个空的div
:
<div id="resultContainer"></div>
在你的视图中只输出内容进入div。
@model MyProject.Models.UserModel
@{
ViewBag.Title = "UserSuccess";
}
User Created Successfully
我不得不说你所做的不是在ASP中使用对话框和部分视图的好方法。NET MVC应用程序。我可以给你一些简单的代码来展示一个想法:
如果列表。CSHTML是一个用户列表页面,并进行编辑。CSHTML是一个分部视图,在。
中有一个编辑表单。列表页:
$(".grid-row .edit").click(function(){
editUser($(this).attr("data-id"));
});
function editUser(id){
var $dialog=$("#dialogEditUser");
if($dialog.length == 0){
$dialog=$("<div id='dialogEditUser'>").appendTo("body");
}
$dialog.dialog({
...
open:function(){
$dialog.load("/user/edit/"+id, function(){
//todo: handle form events
});
}
});
$dialog.dialog("open");
}
你也可以在一个静态方法中打开对话框函数,如:
MvcSolution.Dialog = function (id, title, options) {
var $dialog = $("#" + id);
if ($dialog.length == 0) {
$dialog = $("<div id='" + id + "' class='dialog' title='" + title + "'></div>").appendTo("body");
}
$dialog.dialog(options);
$dialog.dialog("open");
};
你可以在这里找到一个很好的c#和js MVC框架