我们有一个 ASP.NET MVC 项目,在其中我们使用 jQuery.ajax 将一些表单数据发送到 Controller 。在某些情况下,由于错误的 SQL 语句,调用的 Controller 方法会遇到异常。我想在 TRY CATCH 中处理异常,并将有关 SQL 语句失败原因的详细信息传回给用户。因为我正在处理异常,所以 jQuery.ajax 帖子从服务器返回 HTTP 200,因此似乎没有发生错误。如果我使用 jQuery.ajax 完整属性,似乎我能够查找异常详细信息并向用户显示,但我不确定如何从 Controller 端执行此操作。最初我在 Controller 端尝试了这样的事情:
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。
有什么想法可以如何将结果从我的 Controller 传递回 ajax 调用吗?
谢谢
最佳答案
围绕操作方法的响应创建一个包装类,并在其上添加一个 IsSuccess
属性。在 jQuery post success 方法中,检查 IsSuccess 属性值并执行适当的操作。
让我们创建一个可用于所有 View 模型/响应对象的通用包装器。
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);
}
});
关于jquery - 如何将数据从 MVC Controller 传递到 jQuery.ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31860049/