簡體   English   中英

如何將數據從MVC控制器傳遞到jQuery.ajax

[英]How to pass data from MVC controller to jQuery.ajax

我們有一個ASP.NET MVC項目,我們在其中使用jQuery.ajax將一些表單數據發布到控制器。 在某些情況下,由於錯誤的SQL語句,被稱為my的控制器方法會遇到異常。 我想在TRY CATCH中處理異常,並將有關SQL語句被轟炸原因的詳細信息傳遞給用戶。 因為我正在處理異常,所以jQuery.ajax帖子從服務器返回HTTP 200,因此似乎沒有發生錯誤。 如果我使用jQuery.ajax完整屬性,似乎我可以查找異常細節並向用戶顯示,但我不知道如何從控制器端執行此操作。 最初我在控制器端嘗試過類似的東西:

Public Function IndexPost(formvalues as FormCollection) as ActionResult
Try
   ...
Catch ex as Exception
   Dim sErr as String = "Exception occurred: " & ex.ToString
   ViewData("PostResult") = sErr
End Try

Return View()
End Function

然后將其添加到我的jQuery.ajax帖子中:

complete: function (data) {
   var postDataResult = "<%=ViewData("PostResult")%>";
   if (postDataResult.length>2)
   {
      alert("Value of post result: " + postDataResult);
   }
}

由於ajax調用,ViewData(“PostResult”)當然為null。

我有什么想法可以將結果傳回我的控制器的ajax調用?

TKS

在操作方法的響應周圍創建一個包裝類,並在其上有一個IsSuccess屬性。在jQuery post success方法中,檢查IsSuccess屬性值並執行適當的操作。

讓我們創建一個通用的包裝器,它可以用於所有的viewmodel / response對象。

public class ApiResponse<T>
{
    public bool IsSuccess { set; get; }
    public string ErrorCode { set; get; }
    public string Message { set; get; }
    public T Data { set; get; }
}

現在在你的行動方法中,

public ActionResult Save(CustomerVM model)
{ 
  var response=new ApiResponse<Customer>() { Data= new Customer() };
  try
  {
    //Everythiing went good.
    response.IsSuccess=true;
  }
  catch(Exception ex)
  {
      response.Message="Failed to save";
  }
  return Json(response,JsonRequestBehaviour.AllowGet);
}

在客戶端

$.post("Save",{ "name" :"SSS"},function(r){
  if(r.IsSuccess)
  {
    //Do something
  }
  else
  {
    //Error occured, 
   alert(r.Message);
  }
});

您可以使用“Json()”方法(一種“Controller”類方法)將json對象返回到您的ajax帖子。 Json方法需要一個對象,它將是您的ajax調用接收的json對象。

我不知道VB語法,但它應該是這樣的:

catch ex as Exception
    Dim sErr as String = "Exception occurred: " & ex.ToString
    Dim jsonObject= New With { .success = False, .errorMessage = sErr}
    Return Json(jsonObject, JsonRequestBehavior.AllowGet)
End Try

然后,在javascript中你可以這樣讀:

complete: function (data) {
   if(!data.success) {
      alert("Error message: " + data.errorMessage);
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM