2010-10-29 68 views
2

如果我使用jQuery向asp.net mvc控制器操作調用ajax請求,並在該操作內部引發異常,捕獲的最佳方法是什麼並向用戶展示一些東西。什麼是在asp.net上顯示錯誤的最佳方式mvc ajax請求

現在我的加載圖像會一直持續下去。 。 。 。

這裏是我的控制器代碼的例子:

public ActionResult BatchAdd(int[] sharepointKeys) 
    { 
      MyViewModel vm = GetViewModel(); 
      return PartialView("MyPartialView", vm); 
    } 

回答

4

C#

public JsonResult Action(...) 
{ 
    bool error = false; 
    string msg = ""; 
    var data = "your data"; 

    try 
    { 
     //you code 
    } 
    catch (Exception ex) 
    { 
     error = true; 
     msg = "Error ..."; 
    } 

    return Json(new { error = error, msg = ms, data = data }); 
} 

JS:

$.ajax({ 
    type: "POST", 
    url: "Controller/Action", 
    data: "...", 
    beforeSend: function(xhr){ 
     $("#showError").empty(); 
    }, 
    error: function(xhr, ts, et){ 
     $("#showError").append("<div>Error</div>"); 
    }, 
    success: function(response){ 

    if (response.error) { 
     $("#showError").append("<div>"+response.msg+"</div>"); 
    } 
    else { 
     // code ok response 
    } 


    } 
}); 

隨着返程的ActionResult:

的index.asp:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Home Page 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <div id="showError"></div> 
    <div id="dataHtml"></div> 

    <button id="example">Example</button> 
    <script type="text/javascript"> 

     $(function() { 

      $("#example").bind('click', function (ex) { 

       $.ajax({ 
        type: "POST", 
        url: "Home/BatchAdd", 
        data: { sharepointKeys: [1, 2, 3] }, 
        beforeSend: function (xhr) { 
         $("#showError").empty(); 
        }, 
        error: function (xhr, ts, et) { 
         $("#showError").append("<div>Error</div>"); 
        }, 
        success: function (response) { 

         if ($(response).find("#error-message").length > 0) { 
          $("#showError").append("<div>" + $(response).find("#error-message").html() + "</div>"); 
         } 
         else { 
          $("#dataHtml").html("<div>" + $(response).find("#container-response-ok").html() + "</div>"); 
         } 


        } 
       }); 
      }); 

     }); 

    </script> 

</asp:Content> 

的Site.Master:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title> 
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 
    <script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 
</head> 

<body> 
    <div class="page"> 

     <div id="header"> 

      <div id="menucontainer"> 
       <ul id="menu">    
        <li><%= Html.ActionLink("Home", "Index", "Home")%></li> 
        <li><%= Html.ActionLink("About", "About", "Home")%></li> 
       </ul> 
      </div> 
     </div> 

     <div id="main"> 
      <asp:ContentPlaceHolder ID="MainContent" runat="server" /> 
      <div id="footer"></div> 
     </div> 
    </div> 
</body> 
</html> 

MyPartialView.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcApplication1.Controllers.MyViewModel>" %> 
<div> 
    <% if (Model.Error) 
    { %> 
    <div id="error-message"><%= Model.Message %></div> 
    <% } else { %> 
    <div id="container-response-ok"> 
     <div> all ok </div> 
    </div> 
    <% } %> 
</div> 

HomeController.cs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 

namespace MvcApplication1.Controllers 
{ 
    [HandleError] 
    public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      ViewData["Message"] = "Welcome to ASP.NET MVC!"; 

      return View(); 
     } 

     public ActionResult BatchAdd(int[] sharepointKeys) 
     { 
      MyViewModel vm = GetViewModel(); 

      try 
      { 
       vm.Error = true; 
       vm.Message = "Error testing"; 
      } 
      catch (Exception ex) 
      { 
       vm.Error = true; 
       vm.Message = "Errro"; 
      } 

      return PartialView("MyPartialView", vm); 
     } 

     public ActionResult About() 
     { 
      return View(); 
     } 

     private MyViewModel GetViewModel() 
     { 
      return (new MyViewModel()); 
     } 
    } 



    public class MyViewModel 
    { 
     public bool Error { get; set; } 
     public string Message { get; set; } 

     public MyViewModel() 
     { 
      this.Error = false; 
      this.Message = ""; 
     } 
    } 

} 
+0

+1,非常乾淨。 – 2010-10-29 12:30:30

+0

現在我正在返回一個PartialResult(顯然是html),所以我如何支持將仍然支持異常respon – leora 2010-10-29 12:59:42

+0

你可以舉一個例子,說明你現在如何返回與AJAX – 2010-10-29 13:11:41

相關問題