如果有人能提供建議,我很感激。來自控制器的調用窗體OnFailure處理程序,ASP.NET MVC
我有一個Ajax形式:
@using (Ajax.BeginForm("Edit", null, new AjaxOptions() {
UpdateTargetId = updateRegion,
InsertionMode = InsertionMode.Replace,
OnFailure = "formFailure" }))
{}
其UpdateTargetId
不同基於當前的用戶角色:
@{
if (curUser.IsInputer)
{
updateRegion = "content";
}
else if (curUser.IsAuthorizer)
{
updateRegion = "mainPane";
}
}
如果ModelState中是無效的,我想在mainPane
總是返回看法:
<script>
function formFailure(result)
{
$("#mainPane").html(result.responseText);
}
</script>
但是onFailure不會在ModelSt時被調用吃了無效。對於這一點,我設置錯誤代碼控制器:
public ActionResult Edit(ContractModel entity)
{
if(ModelState.IsValid)
{
if(curUser.isInputer) { return RedirectToAction("SomeAction");}
if(curUser.Authorizer) { return RedirectToAction("OtherAction");}
}
Response.StatusCode = 500;//internal server error to fire OnFailure of form
return PartialView(entity);
}
然後我得到期望的結果,即我看到它的誤差mainPane
格在瀏覽器控制檯模式和內部服務器錯誤。然而,當我在本地運行應用程序時,它會以這種方式工作,當我在服務器上發佈並運行應用程序時,我看到錯誤500 Internal server error
,而不是局部視圖。有什麼解決方法嗎?
編輯: 作爲一個選項,我會嘗試檢查模型的形式onSuccess處理錯誤:
var isValid = @Html.Raw(Json.Encode(ViewData.ModelState.IsValid));
if (!isValid) {
$("#mainPane").html(result.responseText);
}
但我仍然得到「內容」分區的視圖。這是爲什麼發生?
感謝您的回覆,但其工作方式與我上次修改時的方式相同。我在「內容」div中看到了responseText。 –
我不這麼認爲。您正在使用:var isValid = @ Html.Raw(Json.Encode(ViewData.ModelState.IsValid))設置「isValid」ONCE,當頁面首次加載時。 ajax表單不會重新加載頁面,因此該行不會再被執行。按照上面的示例,您需要在調用ajax之後再次將ModelState.IsValid發送回客戶端。 – Keith
好的,同意。我試過你的答案,它不適合我,如果formError爲真我仍然獲得「content」div中的所有內容。 –