Si prefiere que sus vistas tengan clases de datos de vista fuertemente tipadas, esto podría funcionar para usted. Otras soluciones son probablemente más correcta, pero este es un buen equilibrio entre el diseño y la practicidad en mi humilde opinión.
La página maestra toma una clase de datos vista inflexible de tipos que contiene sólo la información pertinente a la misma:
public class MasterViewData
{
public ICollection<string> Navigation { get; set; }
}
Cada vista usando esa página maestra toma una clase de vista de datos con establecimiento inflexible que contiene su información y que deriva de las páginas maestras vista de datos:
public class IndexViewData : MasterViewData
{
public string Name { get; set; }
public float Price { get; set; }
}
Dado que no quiero controladores individuales saber nada acerca de la elaboración de los datos de las páginas maestras que encapsulan la lógica de que en una fábrica que se pasa a cada controlador:
public interface IViewDataFactory
{
T Create<T>()
where T : MasterViewData, new()
}
public class ProductController : Controller
{
public ProductController(IViewDataFactory viewDataFactory)
...
public ActionResult Index()
{
var viewData = viewDataFactory.Create<ProductViewData>();
viewData.Name = "My product";
viewData.Price = 9.95;
return View("Index", viewData);
}
}
Inheritance coincida con el maestro para ver bien relación, pero cuando se trata de representación parciales/controles de usuario que va a componer sus datos de vista en las páginas vista de datos, por ejemplo,
public class IndexViewData : MasterViewData
{
public string Name { get; set; }
public float Price { get; set; }
public SubViewData SubViewData { get; set; }
}
<% Html.RenderPartial("Sub", Model.SubViewData); %>
Esta es sólo ejemplo de código y no se pretende para compilar como es. Diseñado para ASP.Net MVC 1.0.
Escribí una guía sobre cómo manejé esto: http://www.britishdeveloper.co.uk/2010/06/mvc-pass-viewmasterpage-model.html debería ayudar – BritishDeveloper