如果有人能提供帮助,我将不胜感激。根据表单提交结果动态更改Ajax.BeginForm()的UpdateTargetId
我想回到根据用户类型不同的部分观点:
[HttpPost]
public ActionResult Edit(ContractModel model)
{
if(ModelState.IsValid)
{
if (curUser.IsInputer) { .... return View("Contracts");}
else if(curUser.IsAuthorizer) { ..... return View("Details");}
}
return PartialView(model);
}
查看:
@{
string updateRegion = "";
if (curUser.IsInputer)
{
updateRegion = "content";
}
else if (curUser.IsAuthorizer)
{
updateRegion = "mainPane";
}
}
<script>
function returnViewOnFailure(result) { //not firing on submission failure
$("#mainPane").html(result);
}
</script>
@using (Ajax.BeginForm("Edit", new AjaxOptions() { UpdateTargetId = updateRegion,
InsertionMode = InsertionMode.Replace,
OnFailure = "returnViewOnFailure" }))
{.........}
问题是,当ModetState.IsValid
= false
我的功能returnViewOnFailure
不点火。 我想UpdateTargetId
是"mainPane"
如果表单提交失败(不管用户类型),否则应该取决于curUser
。
编辑:
所以,我使用Ajax调用透过的形式建议:
<script>
var form = $('#contract_form');
form.submit(function (ev) {
$.ajax({
cache: false,
async: true,
type: "POST",
url: form.attr('action'),
data: form.serialize(),
success: function (data) {
$("#content").html(data);
//How to check ModelState.IsValid and show errors?
}
});
ev.preventDefault();
});
当视图第一次加载时,Ajax.BeginForm会在服务器上评估,因此无论该方法返回什么,它总是会使用相同的'targetID'。其次,你不会抛出任何错误,所以'OnFailure'永远不会被击中。 – 2014-11-05 07:47:24
查看由Ajax.BeginForm方法生成的html。 targetId被放置在属性“data-ajax-update”中。实现一些在提交表单时改变属性值的java脚本。 – Tobias 2014-11-05 08:13:24
如果我检查ViewContext.ViewData.ModelState在页面加载和$(“#mainPane”)。html(内容)上的有效性,但是如何获取内容呢? – 2014-11-05 09:24:01