2009-03-13 2 views
1

Ich habe versucht, die Viewengine verwendet einen zusätzlichen Weg zu machen mit:MasterLocationFormats in WebFormViewEngine nicht verwendet?

base.MasterLocationFormats = new string[] { 
    "~/Views/AddedMaster.Master" 
}; 

im Konstruktor des Viewengine. Es funktioniert gut für aspx und ascx (PartialViewLocationFormats, ViewLocationFormats).

Ich muss immer noch die MasterPage in web.config oder in der Seitendeklaration liefern. Aber wenn ich das tue, dann wird diese Deklaration verwendet, nicht die in der ViewEngine. Wenn ich leere MasterLocationFormats verwende, wird kein Fehler ausgelöst. Wird dies in RC1 nicht implementiert?

EDIT:

mit:

return View("Index", "AddedMaster"); 

statt

return View("Index"); 

im Controller gearbeitet.

Antwort

1

Ihr Beispiel ist nicht wirklich vollständig, aber ich gehe davon aus, dass Ihr Codeblock auf Klassenebene und nicht innerhalb einer Konstruktormethode existiert. Das Problem dabei ist, dass die Basisklasse (WebFormViewEngine) die "location format" -Eigenschaften in einem Konstruktor initialisiert und somit Ihre Deklaration außer Kraft setzt;

public CustomViewEngine() 
{ 
    MasterLocationFormats = new string[] { 
     "~/Views/AddedMaster.Master" 
    }; 
} 

Wenn Sie die hartcodierte Master wollen nur als eine Art letzte Anstrengung Standard Kick in, können Sie etwas tun:

public CustomViewEngine() 
{ 
    MasterLocationFormats = new List<string>(MasterLocationFormats) { 
     "~/Views/AddedMaster.Master" 
    }.ToArray(); 
} 
+0

Ich hatte die in der Standard-Konstruktor gesetzt MasterLocationFormats. Hat es wirklich für dich funktioniert? –

+0

Beachten Sie, dass Sie _must_ in jeder Ihrer Ansichten eine gültige MasterPage in der @ Page-Direktive angeben müssen. Um zu überprüfen, ob meine einfache Lösung funktioniert, verwenden Sie eine der Überladungen der Ansichtsmethode, mit der Sie eine Masterseite angeben können. Z.B. "return View (" Index "," ThisMasterPageDoesntExist ");". – thomasjo