2013-06-21 111 views
1

不确定bext方法如何向客户端显示db异常(ajax调用)?我应该在控制器波纹管中放置一个try/catch吗?目前,我得到了我的ajax调用的通用异常?从mvc控制器显示db异常到我的ajax调用?

控制器:

// GET: Agency Grants 
    public JsonResult GetAgencyGrants(int agencyID) 
    { 
     AuditDAL ad = new AuditDAL(); 
     var grants = ad.GetAgencyGrants(agencyID); //exception here 
     return this.Json(grants.ToList()); 
    } 

Ajax调用:

function GetAuditTypes(container) { 
    $.ajax({ 
     url: '/AMS/Audit/GetAuditTypes', 
     type: 'post', 
     success: function (result) { 
      $.each(result, function (i, item) { 
       container.append($('<option/>').text(result[i].Audit_Type_Desc).attr('value', result[i].Audit_Type_ID)); 
      }); 
     }, 
     error: function (xhr, err) { 
      alert("GetAuditTypes not returned: " + formatErrorMessage(xhr, err)); 
     } 
    }); 
} 

格式化功能:

// formats errors returned 
function formatErrorMessage(jqXHR, exception) { 

    if (jqXHR.status === 0) { 
     return ('Not connected.\nPlease verify your network connection.'); 
    } else if (jqXHR.status == 404) { 
     return ('The requested page not found. [404]'); 
    } else if (jqXHR.status == 500) { 
     return ('Internal Server Error [500].'); 
    } else if (exception === 'parsererror') { 
     return ('Requested JSON parse failed.'); 
    } else if (exception === 'timeout') { 
     return ('Time out error.'); 
    } else if (exception === 'abort') { 
     return ('Ajax request aborted.'); 
    } else { 
     return ('Uncaught Error.\n' + jqXHR.responseText); 
    } 
} 

我不断收到,而不是存储过程内部服务器错误缺少(真正的例外)。

回答

0

阿贾克斯error回调函数处理http错误(但不是针对特定服务器错误)。因此它不会显示的专用错误message.change你这样的代码:

public JsonResult GetAgencyGrants(int agencyID) 
    { 
     AuditDAL ad = new AuditDAL(); 
     try 
     { 
      var grants = ad.GetAgencyGrants(agencyID); //exception here 
      return this.Json(grants.ToList()); 
     } 
     catch(Exception e){ 
      return this.Json(e.Message); 
     }    
    } 

和改变找你的JavaScript代码:

$.ajax({ 
     url: '/AMS/Audit/GetAuditTypes', 
     type: 'post', 
     success: function (result) { 
      if (result instanceof Array) 
      { 
      $.each(result, function (i, item) { 
       container.append($('<option/>').text(result[i].Audit_Type_Desc).attr('value', result[i].Audit_Type_ID)); 
      }); 
      } 
      else{ 
       // Exception Occurred 
       // do somethings with result(contains error message) 
      } 
     }   
    }); 
相关问题