2010-11-19 3 views
4

Ich habe ein Problem mit einer Ansicht. Hier ist der Code-Schnipsel:ASP.NET MVC Die Ansicht 'Name' oder ihr Master wurde nicht gefunden

public ActionResult AddAdvertisement() 
    { 
     ... 
     return RedirectToAction("AdvCreated"); 
    } 

    [HttpGet] 
    public ActionResult AdvCreated() 
    { 
     return View("AdvCreated", "abc"); 
    } 

dann sehe ich den Fehler

Der Blick ‚AdvCreated‘ oder seinen Meister wurde nicht gefunden. Folgende Standorte wurden gesucht:

~/Ansichten/Werbung/abc.master

~/Ansichten/Shared/abc.master

Wenn ich gehen Sie einfach auf URL http://localhost/AdvCreated alles OK. Warum ?

+0

Er sagt, wenn er trifft http: // localhost/AddAdvertisement er ist der Fehler. – mxmissile

Antwort

8

Was ich verstehe, ist, dass Sie versuchen, eine Zeichenfolge an Ansicht als Modell übergeben. Es ist nicht möglich. Es gibt eine Überlastung der View-Funktion wie folgt aus:

View(string viewName,string masterViewName) 

So sieht es für einen Master-Ansicht namens "abc". Wenn Sie eine Zeichenfolge übergeben möchten, konvertieren Sie sie in ein Objekt. Es gibt ein Beispiel here.

+0

Also, die einzige Möglichkeit, eine Zeichenfolge an eine Ansicht zu übergeben, ist es in ViewData zu speichern? – Tony

+0

Nein. Sie können es in ein Objekt konvertieren und es dann nur mit der ToString() - Methode in der Ansicht anzeigen. Überprüfen Sie das Beispiel, das ich gepostet habe, und Sie werden sehen. –

+0

Wenn Sie MVC3 (beliebige Version) verwenden, können Sie auch das dynamische ViewModel .NET 4.0 in Controllern wie ViewModel.MyString = "abc"; verwenden. Sie können dann in der Ansicht über View.MyString darauf zugreifen. – gligoran

1

Ihre Ansicht/aspx/ascx muss sich in einem der aufgeführten Ordner befinden, z. B. dem Code in Ihrem Controller.

Wenn Sie dies nur tun:

return RedirectToAction("AdvCreated"); 

ASP.NET MVC wird vorausgesetzt, dass Sie einen Blick/ascx/aspx in Ihrem Controller-Ordner haben - in Ihrem Fall ~/Ansichten/Werbung/Ordner oder dem freigegebenen Ordner.

Wenn Sie eine bestimmte Ansicht haben außerhalb der angenommener Ordner anzuzeigen, können Sie diese direkt angeben, wie zB:

return RedirectToAction("~/MyFolder/AdvCreated.ascx"); 
5

Sie benötigen die folgende

return View("AdvCreated", (object)"abc"); 

zu tun Oder wenn Sie mit .NET 4 können Sie sogar Folgendes tun:

return View("AdvCreated", model: "abc"); 

Dies zwingt das Framework, die richtige Ove zu verwenden rload, das den zweiten Parameter als Modell behandelt.

Verwandte Themen