我有一個「提交反饋」表單,它使用「Ajax.BeginForm」來呈現包含表單元素的部分。即使ModelState無效,OnSuccess事件也會觸發。這是正常的嗎?我期望能夠做一些回發導致一個無效的模型,然後當模型是有效的,沒有錯誤,然後OnSuccess事件會觸發?即使模型無效,ASP.NET MVC「Ajax.BeginForm」也會執行OnSuccess
回答
這是正常的嗎?
是的,當然。如果服務器發送HTTP 200,則會調用OnSuccess方法。模型狀態有效性的概念僅限於服務器端。只要你的控制器動作返回一些view/partial/json/... OnSuccess就會觸發。如果在控制器動作中引發異常,則會觸發OnError而不是OnSuccess。
因此,爲了處理這種情況下,你可以有你的控制器動作做線沿線的東西:
[HttpPost]
public ActionResult Process(MyViewModel model)
{
if (!ModelState.IsValid)
{
return Json(new { success = false });
}
return Json(new { success = true });
}
然後:
function success(result) {
if (result.success) {
// the model was valid
} else {
// the model was invalid
}
}
你可能失效模式的情況下
現在希望通過刷新表單向用戶顯示錯誤消息。在這種情況下,你可以做的是將你的表單放在partial中,如果發生無效的modelstate,你會從你的controller動作中返回一個partialview,並在成功的情況下返回一個json對象。因此,在您成功處理程序,你可以測試:
function success(result) {
if (result.success) {
// the model was valid
} else {
// there were errors => show them
$('#myform_container').html(result);
// if you are using client side validation you might also need
// to take a look at the following article
// http://weblogs.asp.net/imranbaloch/archive/2011/03/05/unobtrusive-client-side-validation-with-dynamic-contents-in-asp-net-mvc.aspx
// and reattach the client validators to the form as you are
// refreshing its DOM contents here
}
}
我處理這個問題有一個相當簡單的JavaScript技術:
首先設置你OnSuccess
這樣的:
OnSuccess = "UpdateSuccessful(data)"
然後你的javascript函數一樣這個:
function UpdateSuccessful(data) {
if (data.indexOf("field-validation-error") > -1) return;
// Do your valid stuff here
}
這樣就沒有必要搞亂了w第i個控制器,或者更重要的是,你的控制器可以返回Partial View
與模型誤差沒有做任何事情奇怪,即:
public ActionResult SaveDetails(Project model)
{
if (ModelState.IsValid)
{
model.SaveProject();
}
return PartialView("ProjectForm", model);
}
而在你AjaxOptions
:
UpdateTargetId = "FormContents"
現在只要確保你有一個div
或與id="FormContents"
什麼地方顯示您的表單。
'OnSuccess =「UpdateSuccessful(data)」':真的很有幫助。謝謝。 –
這個**'data'**對象是否適用於所有瀏覽器?它是否有任何限制或兼容性問題? –
這應該適用於所有啓用了JavaScript的瀏覽器。 –
你可以做到以下幾點:
var OnSuccess = function() {
if ($(".validation-summary-errors").length == 0) {
//Your javascript/jquery code goes here
}
}
稍有不同的路易斯的回答:
function OnSuccess() {
if ($("span[class='field-validation-error']").length == 0) {
alert("Target Platform saved Successfully.");
}
}
- 1. 即使數據不好,Ajax.BeginForm也會觸發OnSuccess方法
- 2. MVC 3 Razor - Ajax.BeginForm OnSuccess
- 3. Ajax.BeginForm的onSuccess不執行提交後
- 4. ASP.NET - Ajax.BeginForm OnSuccess回調參數
- 5. ASP.NET MVC4 AJAX.BeginForm AjaxOptions OnSuccess不叫
- 6. MVC3 Ajax.BeginForm的onSuccess無法在Firefox運行
- 7. MVC Razor Ajax.BeginForm OnSuccess中的更新元素
- 8. MVC Ajax.BeginForm的onSuccess函數沒有定義
- 9. ASP.NET MVC3 AJAX.BeginForm AjaxOptions OnSuccess OnFailure問題
- 10. 即使窗體無效,Bootstrap模式也會被加載?
- 11. asp.net的MVC Ajax.BeginForm
- 12. Ajax.BeginForm不調用的onSuccess
- 13. 正確處理Ajax.BeginForm OnSuccess
- 14. Ajax.Beginform後驗證時,Model.State無效觸發器OnSuccess函數
- 15. 角模型更新,即使值無效
- 16. ASP.NET MVC - Ajax.BeginForm vs Ajax.ActionLink
- 17. 即使會話無效,管理的bean也不會被釋放
- 18. asp.net的MVC ajax.begineform的onSuccess事件和模型驗證
- 19. 如何使用Ajax.BeginForm OnSuccess和OnFailure方法?
- 20. ASP.net RegularExpressionValidator即使輸入無效也允許回發
- 21. 即使不執行VBScript文件也會自行刪除
- 22. 即使值無效,Validator.IsValid也爲true
- 23. ASP.NET Ajax.BeginForm帖子即使驗證失敗
- 24. 即使'使用'也找不到模型
- 25. Ajax.BeginForm處理兩個不同的onSuccess響應,MVC 5,C#
- 26. ASP.NET MVC 3 Ajax.BeginForm復位模型值出乎意料
- 27. ASP MVC 3 - Ajax.BeginForm沒有提交模型
- 28. Asp.Net MVC - 防止OnSuccess回調觸發白化Ajax.BeginForm由於表單驗證
- 29. 即使它無效,Javascript表單也會提交
- 30. 即使圖像無效,Firefox「onerror」也不會啓動
我認爲這是不必要的複雜的工作。我們顯然需要一個簡單的值來指示模型是否有效。 –