Ich habe mit ASP.NET MVC mit einer Website, die eine Master-Seite enthält, herumgespielt.
Ich habe ein MVC-Benutzersteuerelement namens ProductThumbnailControl
. Die Benutzersteuerung zeigt ein Produkt und ein kleines Vorschaubild an. Die Ansicht ist eine ViewProduct
Ansicht, in der alle Produktinformationen angezeigt werden - das Benutzerkontrollfeld ist nur ein UI-Element außerhalb der Website.
public partial class ProductThumbnailControl :
System.Web.Mvc.ViewProductControl<ViewProductsModel>
{
}
Ich habe einen Blogeintrag gelesen die zeigt, wie die Benutzerkontrollen verbraucht werden ViewData
. Ich habe gelernt, dass die Benutzerkontrolle automagisch erhält sein Modell von der übergeordneten Ansicht. Da die Ansicht dieselben Daten verwendet, muss sie nichts explizit an das Benutzersteuerelement weitergeben, was zu einem saubereren Markup und Code führt.
Jetzt habe ich erfahren, dass die Masterseite dieselbe ViewData
wie die Seite. Das bedeutet, dass die Masterseite selbst nicht wirklich ein Modell hat, um sich selbst zu rendern.
Pregunta
Wie kann eine Musterseite ihre Daten überhaupt erhalten?
Ich habe mir überlegt, Folgendes zu versuchen?
Sie könnten eine SiteModel
:
//Arbitrary properties for example
class SiteModel
{
public string PartnerId {get; set;}
public ShoppingCart ShoppingCartContents {get; set;}
public string CurrentUserId {get; set;}
}
Die Ansicht erbt von ihr:
class ViewProductModel : SiteModel
{
public Product Product {get; set;}
}
SiteModel
würde von der Master-Seite verbraucht werden. Ansichten könnten bei Bedarf Daten daraus verwenden - wenn sie die E-Mail des aktuellen Benutzers irgendwo anzeigen müssten.
Ist das eine furchtbare Idee?
Sollte die Masterseite ihre Daten einfach von dort beziehen, wo sie sie benötigt?
Was ist, wenn ich ein Benutzersteuerelement in die masthead
?
Woher sollte sie ihre ViewData
aus, da es nur einen einzigen ViewData
Objekt für die gesamte Seite?
Müsste ich diese schreckliche Syntax verwenden, die ich hasse, und der Benutzerkontrolle der Masterseite ein explizites Modell übergeben?
Html.RenderUserControl("~/Views/Account/UserControls/Header.ascx",
null, new { SelectedItem = "Profile" })
Wie geht man am besten mit diesem Szenario um?