我已经阅读了很多关于这个主题的不同帖子,我将继续这样做并尝试各种各样的事情。尽管如此,由于我对MVC的相对缺乏经验,我的信息变化如此之多,我觉得我有点像圈子一样。
这是情况。我在包含jqGrid中的记录的MVC3应用程序中显示(Razor)视图。双击记录将在jQuery UI对话框中打开该记录。原始视图仅包含表示对话框的视图。被调用的动作返回一个局部视图,该视图成为对话div的内容。
function editItem(gridID, url) {
var rowID = getSelectedRowID(gridID);
if (rowID == null) {
alert('No row selected.\r\nPlease select a row and try again.');
return;
}
else {
var grid = getGrid(gridID);
$("#editDialogue").load(url + "/" + grid.SelectedRowID, function (html) {
$("#editDialogue")[0].value = html;
$("#editTabs").tabs();
$("#editDialogue").dialog("open");
});
}
}
这一部分有效,虽然我有一种感觉它可以进行一些清理。我真正的问题是稍后提交该对话框中包含的表单。它应该回发给具有相同名称的动作。该操作应该验证并保存或返回具有验证错误的相同局部视图。目前我正在尝试返回视图而不做任何其他事情。视图返回正常但是整个页面被替换,而不仅仅是对话框的内容。
我尝试了各种各样的东西,包括使用Ajax.BeginForm并将对话框div的id指定为AjaxOptions的UpdateTargetId。到目前为止,没有任何工作。请注意,提交的表单位于div内部,因此也会被替换。不确定这是否是问题的一部分。
我现在正在收拾这一天所以我想我会发布并看到一夜之间会发生什么,然后再在早上再次攻击这个问题。
答案 0 :(得分:2)
jmcilhinney, 您设置AjaxOptions.UpdateTargetId是正确的,但您还需要将AjaxOptions.InsertionMode设置为InsertionMode.Replace。
答案 1 :(得分:0)
我也遇到了同样的问题。修复是为了确保页面上有jquery.unobtrusive-ajax.is文件。这解决了我的问题。只需仔细检查即可。我确信我拥有所有js文件,但发现我错过了那个。