it-swarm.com.de

Zeigen Sie eine Ansicht von einem anderen Controller in ASP.NET MVC an

Kann eine Ansicht von einem anderen Controller angezeigt werden?

Angenommen, ich habe beispielsweise eine CategoriesController- und eine Category/NotFound.aspx-Ansicht. In CategoriesController kann ich View("NotFound") problemlos zurückgeben.

Nun sagen wir, ich habe eine ProductsController und eine Aktion und Ansicht, um ein Produkt hinzuzufügen. Für diese Aktion ist jedoch eine Kategorie erforderlich, zu der das Produkt hinzugefügt werden kann. Zum Beispiel Products/Add/?catid=10.

Wenn ich die Kategorie nicht anhand von catid finden kann, möchte ich die NotFound-Ansicht vom Categories-Controller aus anzeigen, anstatt eine CategoryNotFound-Ansicht unter dem Products-Controller zu erstellen.

Ist das möglich oder strukturiere ich die Dinge falsch? Gibt es eine gute Möglichkeit, dies zu tun?

223
dtc

Ja. Standardmäßig prüft ASP.NET MVC zunächst in \Views\[Controller_Dir]\. Wenn danach jedoch die Ansicht nicht gefunden wird, wird \Views\Shared überprüft.

Das freigegebene Verzeichnis dient dazu, Ansichten über mehrere Controller hinweg gemeinsam zu nutzen. Fügen Sie einfach Ihre Ansicht zum gemeinsam genutzten Unterverzeichnis hinzu und schon kann es losgehen.

Wenn Sie return View("~/Views/Wherever/SomeDir/MyView.aspx") tun, können Sie jede Ansicht zurückgeben, die Sie möchten.

248
womp

Sie können verwenden:

return View("../Category/NotFound", model);

Es wurde in ASP.NET MVC 3 getestet, sollte jedoch auch in ASP.NET MVC 2 funktionieren.

155
Guillaume86

Ja, es ist möglich . Geben Sie eine RedirectToAction()-Methode wie folgt zurück:

return RedirectToAction("ActionOrViewName", "ControllerName");
40
doncadavona

Haben Sie RedirectToAction ausprobiert?

33
Paul Johnson

Ja, du kannst. Gib eine Aktion wie diese zurück:

return RedirectToAction("View", "Name of Controller");

Ein Beispiel:

RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees");

Dieser Ansatz ruft die GET-Methode auf 

Sie können auch Werte wie folgt übergeben:

RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees", new {id = id.ToString(), viewtype = "extended" );
16
ignacio chiazzo

Sie können jeden Controller auch über JavaScript / jQuery aufrufen. Angenommen, Sie haben einen Controller, der 404 oder eine andere Benutzersteuerung/Seite zurückgibt. Bei einer bestimmten Aktion können Sie von Ihrem Client-Code aus eine Adresse aufrufen, die Ihren Controller auslöst und das Ergebnis im HTML -Format .__ zurückgibt. Ihr Client-Code kann dieses zurückgegebene Ergebnis übernehmen und an beliebiger Stelle ablegen will in dir deine Seite ...

5
Marko

Mit diesem Code können Sie jeden Controller erhalten:

var controller = DependencyResolver.Current.GetService<ControllerB>();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext, 
controller);
0
Yair GR