2017-09-13 95 views
3

服務器端我有它返回一個JsonResult交易:如果控制器出現故障,如何在View中顯示錯誤? ASP.NET MVC

public JsonResult DoStuff(Guid id, string userInputText) 
{ 
    var product = _repository.Product(id); //busines logic 

    //Only a specific product must have userInputText <= 10 characters. 
    //Other products may have as many characters as the user wants. 
    if(product == Enum.SpecificProduct && userInputText.Count() > 10) 
    { 
      //The user input text comes from the View... 
      //If it has more then 10 characters, need to send the errorMessage to the View. 
      return Json(new { success = false, errorMessage = "error message" }, JsonRequestBehavior.AllowGet); 
    } 

    //Otherwise, do stuff on the product... 

    //and return success at the end. 
    return Json(new { success = true }); 
} 

在另一方面,在客戶端我有這樣的:

using (Ajax.BeginForm("DoStuff", ajaxOptions)) 
{ 
    <span>Enter the text:</span> 
    @Html.TextArea("userInputText", new { onkeyup = "SyncContents(); return false;" }) 

    <input type="submit" value="Add" /> 
    <!-- error message should be displayed here--> 
} 

這是AjaxOptions:

var ajaxOptions= new AjaxOptions 
{ 
    OnSuccess = "reload", 
    OnFailure = "FailMessage" 
}; 

如果輸入的文本有超過10個字符,當「添加」按鈕被按下時,控制器正在對服務器端執行代碼和失敗,我怎麼可以從那裏得到的errorMessage這裏使用在View中通知用戶?出現

<script> 
    function FailMessage() { 
     alert("Fail Post"); 
    } 
</script> 

但沒有彈出「失敗後」:

我試圖提醒消息。

此致敬禮。

+0

我不知道你的ajaxOptions如何與上面的代碼saveOptions連接。可能會將您的ajaxOptions更改爲新的Ajaxoptions {OnSuccess =「重新加載」,OnFailure =「FailMessage」},並記住在「重新加載」後添加「,」 – oopsdazie

+0

真的很抱歉出現這些錯誤,我剛剛編輯了我的問題。 saveOptions實際上是ajaxOption,我正在處理錯誤的名稱。謝謝。 –

+0

所以,用戶只能在文本區域..如果在11個以上的字符,用戶類型..然後你想要的錯誤信息輸入到10個字母? –

回答

2

這裏的問題是Ajax的助手認爲,所有的迴應都是成功的。您的控制器操作正在返回HTTP 200,因此沒有問題。如果響應狀態不在200系列

https://msdn.microsoft.com/en-us/library/system.web.mvc.ajax.ajaxoptions.onfailure(v=vs.118).aspx#P:System.Web.Mvc.Ajax.AjaxOptions.OnFailure

AjaxOptions.OnFailure物業

調用此函數。

因此,您需要使用成功處理程序並明確檢查JSON success參數。

或你的行動改變HttpStatusCode響應。

if (notValid) 
{ 
    Response.StatusCode = 400; // Bad Request 
    return Json(new { success = false, errorMessage = "error message" }, JsonRequestBehavior.AllowGet); 
} 

但是,對於驗證錯誤,我只是檢查成功處理程序中的錯誤。

是的,你應該驗證客戶端和服務器上。

相關問題