我有一个使用实体foo
的对话框。
保存此对话框中的值后,我执行以下操作:
$('#SaveEditPQ').submit(); //jquery submit
$("#NewQuickDlg.results").remove(); // clear the fields within the dialog Box
$("#AddQuickDlg").dialog("close"); // close the dialog box.
现在......当我尝试使用(元数据)验证时,问题出现了。如果ModelState.IsValid
为假,我想保持对话框打开。
这可以通过扩展我的foo
实体来获得ModelState.IsValid
的值并将我的Jquery更改为:
$('#SaveEditPQ').submit();
if ('@Model.IsValidVariable'==true)
{
$("#NewQuickDlg.results").remove();
$("#AddQuickDlg").dialog("close");
}
这是最好的方法吗?
答案 0 :(得分:1)
我正在努力解决同样的问题,但我以不同的方式解决了这个问题。我不想用隐藏变量污染我的模型来关闭对话框,所以我所做的是重定向到共享的_close partialview。然后在我的帖子后,检查是否存在关闭div并关闭对话框。所以我的查询看起来像
$(document).on('click', "#SaveButton", function () {
$.ajax({
url: "/controller/Edit",
type: "POST",
data: $("form").serialize(),
error: function (data) {
var errorMessage = $.parseJSON(data.responseText);
},
success: function (data) {
if (data) {
if ($(data).attr('id') == 'close') {
$("#myDialog").dialog('close');
}
$("#myDialog").html(data);
$("form :input:visible:enabled:first").focus();
}
else {
$("#myDialog").html('no data');
}
return false;
}
});
现在我在对话框中看到了服务器端验证。
这是控制器方法
[HttpPost]
public ActionResult SaveEdit(SomeType viewModel)
{
if (!ModelState.IsValid)
{
PopulateDropDowns(viewModel);
return PartialView(viewModel);
}
var someObject= _objectRepository.Get(viewModel.Id);
//make some changes to someObject
_objectRepository.Save(someObject);
return PartialView("_close");
}
所以这也遵循PRG模式