[英]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.