2010-12-23 5 views
1

Ich habe eine einfache Aktion:Warum sucht meine ASP.NET-Aktion nach der falschen Ansicht?

public ActionResult CommentError(string error) 
    { 
     return View(error); 
    } 

Ich habe eine einfache Teilansicht genannt CommentError.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<String>" %> 

<%: Model %> 

Als ich zu der Ansicht directy durchsuchen nach feiner myurl.com/find/Comments/CommentError die Ansicht zeigt gehen .. . keine Fehler.

Aber, wenn ich zu myurl.com/find/Comments/CommentError?error=SomeErrorString gehen, statt die Querystring an string error binden, sucht es nach einer Ansicht namens SomeErrorString.ascx.

Warum passiert das?

bearbeiten
Hinweis, ich tue eine benutzerdefinierte global.asax haben, wie durch die Pfade angezeigt Ich bin mit (/ find/Kommentare/CommentError :::/find/{Controler}/{Aktion})

Antwort

6

Wie erwähnt, sucht MVC nach einer Ansicht, die gleich dem Zeichenfolgenparameter benannt ist. Um dies zu vermeiden, müssen Sie es auf ein Objekt werfen ...

public ActionResult CommentError(string error) 
{ 
    return View((object)error); 
} 
+0

danke ... perfekt – quakkels

4

Sie sollten das Model Objekt vermeiden, das Sie an den View() Helfer vom Typ string übergeben. Dies ist die Ursache für Ihren Fehler.

MVC ist auf der Suche nach einem Viewnamens was Ihr String-Parameter ist. Da dies die beste übereinstimmende Überladung von View() ist: Die View(string) Überladung verwendet den Parameter string als Name der zu ladenden Ansicht.

Sie sollten Ihre Modelldaten (die Zeichenfolge) in einem benutzerdefinierten Typ einkapseln oder diese Informationen stattdessen über die ViewData-Auflistung übergeben.

+0

.. . Daten anzeigen? Und auf stark typisierte Ansichten verzichten? Ja wirklich? – quakkels

+0

@quakkels: Als zweite Option, wenn der Entwickler entscheidet, nicht die erste vorgeschlagene Route zu gehen, ein benutzerdefiniertes Modell. – David

+0

@David - Ich habe ein benutzerdefiniertes Model Objekt erwähnt. Quakkels war zu beschäftigt, um zu knien, um zu sehen, dass ich denke. –

0

Als Alternative Antwort (nur für Bildung) Sie könnten nur eine andere Überlastung of View() aufrufen

return View("CommentError", null, error); 
+0

Danke für die zusätzliche Info! – quakkels

Verwandte Themen