[英]Strongly typed master pages polymorphism - nested masterpages ignore inherit attribute
[英]ViewDataFactory and strongly typed master pages
我试图让我的强类型母版页在我的ASP MVC 2.0应用程序中工作。 在这两篇文章的帮助下,我走得很远:
问题是我不确定如何使ViewDataFactory代码正常工作,这是我的代码:
BaseController.cs
public class BaseController : Controller
{
private IPageRepository _repPage;
public BaseController(IPageRepository repPage)
{
_repPage = repPage;
}
protected T CreateViewData<T>() where T : MasterViewData, new()
{
IViewDataFactory factory = new ViewDataFactory();
IEnumerable<Page> pages = _repPage.GetAllPages();
return factory.Create<T>(pages);
}
}
HomeController.cs
public class HomeController : BaseController
{
public ActionResult Index()
{
HomeViewData viewData = CreateViewData<HomeViewData>();
viewData.Name = "Test";
return View("Index", viewData);
}
public ActionResult About()
{
return View();
}
}
ViewDataFactory.cs
public interface IViewDataFactory
{
T Create<T>(IEnumerable<Page> pages) where T : MasterViewData, new()
}
public class ViewDataFactory : IViewDataFactory
{
public ViewDataFactory()
{
}
}
HomeViewData.cs
public class HomeViewData : MasterViewData
{
public string Name { get; set; }
}
MasterViewData
public class MasterViewData
{
public IEnumerable<Page> Pages { get; set; }
}
构建解决方案时,出现以下构建错误:
"; expected" in ViewDataFactory.cs
指向代码段:
T Create<T>(IEnumerable<Page> pages) where T : MasterViewData, new()
我想我错过了一些必不可少的东西,对此我是新来的,任何帮助将不胜感激!
您为什么不只在该行的末尾添加分号? :)
抽象方法(以及接口方法)以分号代替主体。
由于Aviad P.的建议以及一些反复试验,我终于使它工作了。
这就是我的IViewDataFactory
最终的样子:
public interface IViewDataFactory
{
T Create<T>(IEnumerable<Page> pages) where T : MasterViewData, new();
}
public class ViewDataFactory : IViewDataFactory
{
public T Create<T>(IEnumerable<Page> pages) where T : MasterViewData, new()
{
T t = new T();
t.Pages = pages;
return t;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.