2016-07-30 22 views
2

Ich habe ein Web-API-Projekt in Visual Studio erstellt. Ich verwende Attribut-Routing. Hier ist der Controller unter Controller-Ordner:ASP.NET-Ansicht nicht gefunden

public class RegistrationController : Controller 
{ 
    // GET: Registration 
    [Route("")] 
    public ActionResult CreateUser(string platform) 
    { 

     return View("~/Views/Registration/CreateUser.cshtml", platform); 
    } 
} 

Als ich rufen Sie die CreateUser Aktion der URL http://localhost/application es funktioniert, aber wenn ich versuche, eine Abfrage-String-Parameter in der URL übergeben http://localhost/application?platform=android, gibt es folgende Fehlermeldung:

Ich kann nicht verstehen, warum es die Ansicht nicht finden kann, wenn es dort ist oder warum es sogar versucht, eine Ansicht mit dem Namen des Abfragezeichenfolgeparameters zu finden.

+0

soll Dieser Code erwartet funktionieren arbeiten fein. Sind Sie sicher, dass die View-Datei im Projekt/Lösung enthalten ist? – Shyju

+0

Sie sollten nicht den gesamten Pfad der Ansicht in der Rückansicht benötigen. Warum haben Sie auch einen leeren Dekorateur an der Spitze? – thsorens

+0

Während der gesamte Pfad nicht benötigt wird, wird es nichts brechen. Es sollte immer noch funktionieren. Die leere Route soll diese Aktion zum Standard machen. – Shyju

Antwort

4

Es kann wahrscheinlich die Ansicht finden. Es ist die Masterseite, die nicht gefunden werden kann.

Das liegt daran, dass Sie die

class Controller : ... { 
    ViewResult View(string viewName, string masterName); 
} 

Überlastung Methode verwenden, die

Creates a System.Web.Mvc.ViewResult object using the view name and master-page name that renders a view to the response.

der Hinweis war die Tatsache, dass es den Parameterwert bei der Suche nach einer Ansicht ändern. Da Sie den übergebenen Plattformparameter als Zeichenfolge angegeben haben, entspricht er der Methode, die mit der Methode string viewName und aufgerufen wurde.

Controller hat viele Überlasten für die ViewResult View() Methode. In diesem Fall wollten Sie wahrscheinlich die platform als Objektmodell übergeben. Sie können dieses Problem beheben, indem benannte Argumente verwendet, die die Verwirrung kennt, indem man den Compiler vermeiden würden, welche Methode überlasteten Sie anrufen sollten ....

public class RegistrationController : Controller { 
    // GET: Registration 
    [Route("")] 
    public ActionResult CreateUser(string platform) { 
     return View("~/Views/Registration/CreateUser.cshtml", model: platform); 
    } 
} 

Von dort sollte alles wie

+0

Arbeitete wie ein Charme, danke. –