如果有人能提供幫助,我將不勝感激。根據表單提交結果動態更改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