2016-10-26 1 views
0

Das Szenario ist in einem ASP.NET MVC (4,5) maxing ein Ajax-Aufruf, der eine Teilansicht zurückgibt. Manchmal muss ich jedoch basierend auf verschiedenen Situationen eine Fehlermeldung ausgeben - z. B. etwas für den Benutzer anzeigen.ASP.NET MVC AJAX Anruf zurück Fehlermeldung parallel zur Teilansicht

Mein aktueller Ansatz ist dies.

in JS:

$.ajax({ 
    url: url, 
    type: "POST", 
    data:{ id: id}, 
    success: function (response) { 
     $("#container").html(response); 
    }, 
    error: function (er) { 

     if (er.status == "405") 
      {// do someth } 
     else if (er.status == "406") 
       {// do someth else } 
    } 
}); 

In der Steuerung:

public ActionResult ServerMethod(int id) 
{ 
    if (id = 0) 
     return new HttpStatusCodeResult(405); 
    if (id = 1) 
     return new HttpStatusCodeResult(406); 

    //otherwise.. 
    return PartialView("View", Model); 
} 

Ich bin jedoch bewusst ist dies ein Hack und nicht die eine richtige Lösung .. Gibt es einen besseren Weg, dies zu tun?

Antwort

0

können Sie

Response.StatusCode = 405; 

und dann wieder die Ansicht Modell

return PartialView("View", Model); 

und es dann verfolgen im Fehlerabschnitt eingestellt?

1

Sie könnten in Ihren Fehlerfällen eine JsonResult zurückgeben. Sie könnten Ihrem Json beliebige Eigenschaften hinzufügen.

Etwas wie folgt aus:

public ActionResult ServerMethod(int id) 
{ 
    if (id == 0) 
    { 
     return Json(new 
     { 
      Failed = true, 
      FailType = "Type1", // Whatever makes sense to you 
      //OtherRelevantProperty = whatever 
     }); 
    } 

    if (id == 1) 
    { 
     return Json(new 
     { 
      Failed = true, 
      FailType = "Type2", // Whatever makes sense to you 
      //OtherRelevantProperty = whatever 
     }); 
    } 

    //otherwise.. 
    return PartialView("View", Model); 
} 

In Ihrer Ajax-Aufruf können Sie dies tun:

$.ajax({ 
    url: url, 
    type: "POST", 
    data:{ id: id}, 
    done: function (response) { 
     if (response.Failed) { 
      // Switch by response.FailType and use any relevant 
      // json properties you created in the controller 
     } 
     else { 
      $("#container").html(response); 
     } 
    } 
}); 

Wenn Sie unbedingt brauchen, um auch ein ausgefallenes Statuscode zurückgeben, können Sie es vor der Rückkehr in die Set könnte json wie:

if (id == 0) 
{ 
    Response.StatusCode = 500; 

    return Json(new 
    { 
     Failed = true, 
     FailType = "Type1", // Whatever makes sense to you 
     //OtherRelevantProperty = whatever 
    }); 
} 

Und dann könnten Sie den fehlgeschlagenen Fall in IhrembehandelnRückruf:

$.ajax({ 
    url: url, 
    type: "POST", 
    data:{ id: id}, 
    done: function (response) { 
     $("#container").html(response); 
    }, 
    fail: function(xhr) { 
     var response = JSON.parse(xhr.responseText); 
     if (response.Failed) { 
      // Switch by response.FailType and use any relevant 
      // json properties you created in the controller 
     } 
    } 
}); 

Bitte beachten Sie, dass ich diesen bestimmten Code nicht getestet haben, und es ist nur zu Demonstrations. Ich verwende jedoch ein ähnliches Setup in meinen Projekten.