ViewDataFactory和强类型母版页

Mar*_*tin 2 c# asp.net asp.net-mvc asp.net-mvc-2

我试图让我的强类型母版页在我的ASP MVC 2.0应用程序中工作.我在这两个帖子的帮助下走得很远:

将数据传递到ASP.NET MVC中的母版页

强类型的ASP.Net MVC母版页

问题是,我不知道如何使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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

ViewDataFactory.cs

public interface IViewDataFactory
{
    T Create<T>(IEnumerable<Page> pages) where T : MasterViewData, new()
}

public class ViewDataFactory : IViewDataFactory
{
    public ViewDataFactory()
    {
    }  
}
Run Code Online (Sandbox Code Playgroud)

HomeViewData.cs

public class HomeViewData : MasterViewData
{
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

MasterViewData

public class MasterViewData
{
    public IEnumerable<Page> Pages { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我构建解决方案时,我得到了以下构建错误:

"; expected" in ViewDataFactory.cs
Run Code Online (Sandbox Code Playgroud)

哪个指向代码段:

T Create<T>(IEnumerable<Page> pages) where T : MasterViewData, new()
Run Code Online (Sandbox Code Playgroud)

我想我错过了必不可少的东西,我对此很新,任何帮助都将不胜感激!

Avi*_* P. 6

为什么不在该行的末尾添加分号?:)

抽象方法(以及接口方法)使用分号代替正文.

  • 那是因为它确实没有,我假设您正在使用Visual Studio,如果是这种情况,请右键单击`ViewDataFactory`类声明中的`IViewDataFactory`,然后选择`Implement Interface` (2认同)