Я играл с ASP.NET MVC с сайтом, содержащим главную страницу.
Я создал пользовательский элемент управления MVC под названием ProductThumbnailControl
. Пользовательский элемент управления отображает продукт и маленькое уменьшенное изображение. Представление - это представление ViewProduct
, которое отображает полную информацию о продукте - пользовательский контроль просто является элементом пользовательского интерфейса на сайте.
public partial class ProductThumbnailControl :
System.Web.Mvc.ViewProductControl<ViewProductsModel>
{
}
Я прочитал запись в блоге , в которой показано, как пользовательские элементы управления потребляют ViewData
. Я узнал, что пользовательский элемент управления может автоматически получить свою модель из родительского представления. Поскольку он потребляет одни и те же данные, представлению не нужно явно передавать что-либо пользовательскому элементу управления, что обеспечивает более чистую разметку и код.
Итак, теперь я узнал, что мастер-страница использует тот же ViewData
, что и страница. Это означает, что сама мастер-страница на самом деле не имеет модели для визуализации.
Вопрос
Какой правильный способ для мастер-страницы получить данные в первую очередь?
Я думал попробовать следующее?
Вы можете иметь SiteModel
:
//Arbitrary properties for example
class SiteModel
{
public string PartnerId {get; set;}
public ShoppingCart ShoppingCartContents {get; set;}
public string CurrentUserId {get; set;}
}
Вид наследуется от него:
class ViewProductModel : SiteModel
{
public Product Product {get; set;}
}
SiteModel
будет использовано главной страницей. Представления могут использовать данные из него, если это необходимо - если им нужно где-то отображать адрес электронной почты текущего пользователя.
Это ужасная идея?
Должна ли главная страница просто получать свои данные, где бы она ни нуждалась?
Что делать, если я хочу включить пользовательский элемент управления в masthead
?
Откуда он взял бы ViewData
, поскольку для всей страницы есть только один ViewData
объект?
Придется ли мне использовать этот ужасный синтаксис, который я ненавижу, и передать пользовательский элемент управления главной страницы явной модели?
Html.RenderUserControl("~/Views/Account/UserControls/Header.ascx",
null, new { SelectedItem = "Profile" })
Какой лучший способ справиться с этим сценарием?