Controller, um eine Fehlermeldung anstelle einer Ansicht zurückzugeben?

8

Ich bin ziemlich neu in ASP.NET MVC und bin mir nicht sicher, wie ich die folgende Situation am besten behandeln kann.

Eine Methode in meinem Controller muss einige Daten basierend auf einem ID-Argument laden. Unter normalen Umständen wird dieses ID-Argument auf eine gültige ID einer Entität innerhalb meiner Datenbank gesetzt. Ich konstruiere einige Daten und lege sie in ViewBag, die die Ansicht verwendet, um die Seite zu rendern.

Ich möchte jedoch eine grundlegende Fehlerbehandlung, nur für den Fall, dass das ID-Argument nicht gültig ist. Obwohl ich in der Ansicht eine Menge Fehlerbehandlungscode schreiben könnte, wäre es viel einfacher, die Ansicht nicht anzuzeigen, wenn ein wichtiger Missbrauch oder eine Fehlfunktion der Site vorliegt.

Gibt es eine Möglichkeit, wie der Controller einfach eine "Item not found" -Zeichenfolge oder etwas Ähnliches zurückgeben kann und diese anstatt der normalen Ansicht anzeigen kann? Oder vielleicht kann jemand eine bessere Idee vorschlagen?

    
Jonathan Wood 07.12.2011, 06:54
quelle

4 Antworten

27
%Vor%

Oder wenn Sie stattdessen ein HTTP 404 zurückgeben möchten:

%Vor%     
Chris Fulstow 07.12.2011, 06:57
quelle
7

Falls das Abrufen des Modells aus der Datenbank (wie in Darin's Antwort beschrieben) irgendwie kompliziert ist und nicht generisch gemacht werden kann , gehe ich so mit nicht gefundenen Ressourcen um.

Implementieren Sie Ihren Basiscontroller

%Vor%

Und in abgeleiteten Controllern - verwenden Sie diese Methode

%Vor%

Und was machen Sie mit der resultierenden http-Ausnahme, geben Sie die benutzerdefinierte Ansicht zurück, protokollieren Sie den Fehler, hängt von der konfigurierten HandleErrorAttribute ab.

    
archil 07.12.2011 07:56
quelle
4
%Vor%

Und da das Schreiben dieses Codes in Ihren Aktionen immer schnell langweilig wird, ist es eine bessere Lösung, ein benutzerdefiniertes Modellbinder zu schreiben, das das Modell aus der Datenbank holt und, falls nicht gefunden, einfach eine neue HttpException auslöst den Statuscode auf 404. Dann sieht Ihre Controller-Aktion einfach so aus:

%Vor%

und der Modellbinder selbst:

%Vor%

Dieser Modellbinder könnte offensichtlich generischer gemacht werden.

    
Darin Dimitrov 07.12.2011 06:59
quelle
4

Sie können es tun, indem Sie einfach eine Ausnahme vom Controller werfen.

Sie müssen folgenden Code schreiben und ErrorController und seine jeweilige Ansicht hinzufügen.

Global.asax

%Vor%

ErrorController:

%Vor%

Ein anderer Ansatz:

Wenn Sie eine Ansicht für einen bestimmten Fehler schreiben möchten, müssen Sie folgenden Code schreiben. Sie müssen nur DivByZero Ansicht hinzufügen.

%Vor%

DivByZero Ansicht:

%Vor%     
alok_dida 07.12.2011 11:05
quelle

Tags und Links