2010-05-14 3 views
21

Я использую ASP.NET MVC с jQuery. У меня есть следующее действие MVC, которое возвращает частичную страницу в «Успехе». On Error Application, я не уверен, что отправить его для правильного обращения с ним на стороне клиента:Как вернуть ошибку в сценарии Ajax

public ActionResult LoadFilterSet(int filterSetId) 
{ 
    try 
    { 
     BreadCrumbManager bcManager = this.ResetBreadCrumbManager(this.BreadCrumbManagerID); 
     GeneralHelper.LoadBreadCrumbManager(bcManager, filterSetId); 

     ViewData["BreadCrumbManager"] = bcManager; 
     return View("LoadFilterSet"); 
    } 
    catch (Exception ex) 
    { 
     return Content(""); 
    } 
} 

Ниже мой JQuery Ajax вызова. Обратите внимание, что я проверяю длину данных, чтобы убедиться, что ошибок нет. Пожалуйста, предложите мне лучший способ сделать это.

$.ajax({ 
    type: "GET", 
    dataType: "html", 
    async: true, 
    data: ({ filterSetId: selectedId }), 
    url: link, 
    contentType: "text/html; charset=utf-8", 
    success: function(data, textStatus) { 
     if (data.length > 0) { 
      // Clear the local filters first. 
      clearLocalFilters(); 
      $('td.selected-filters table.filters-display').append(data); 
     } 
    } 
}); 

ответ

32

Я хотел бы добавить функцию ошибок в вашем настройка вызова ajax. Пусть сервер определит сообщение об ошибке для отображения и передаст ему обработчик ошибок ajax и покажет его.

success: function(data, textStatus) {  
    // Clear the local filters first.  
    clearLocalFilters();  
    $('td.selected-filters table.filters-display').append(data);   
}, 
error: function (data) { 
    alert(data.responseText); // use any display logic here 
} 

В действии вашего контроллера, если обнаружена ошибка

Response.StatusCode = (int)HttpStatusCode.BadRequest; 
return Content(errorMessage, MediaTypeNames.Text.Plain); 
+0

срабатывание ошибки ajax делает трюк. Мне нравится этот ответ. – mohang

+0

Какой тип 'Content'? Я не вижу его в документах. все, что я вижу, это 'ContentResponse', который не принимает statusCode, HttpStatusCodeResult', который обертывает ошибку на странице html и' System.Web.UI.WebControls.Content', которая совершенно другая – roo2

1

Я думаю, что вы можете сделать return Content(false.ToString().ToLower());, если выдается ошибка, а затем проверить, если данные не ложен

if(data != false) 
{ 

    //do stuff 
} 

или

if(!data) 
    alert("Error"); 
else 
{ 
    //do stuff 
} 
+0

Привет Knepe, Это более или менее то, что я делаю в функции успеха. Это допускает только один случай отказа. Если я хочу дать должную причину неудачи, я бы не смог сделать это элегантно, используя этот метод. – mohang

Смежные вопросы