【问题标题】:ViewDataFactory and strongly typed master pagesViewDataFactory 和强类型母版页
【发布时间】:2010-01-01 22:46:38
【问题描述】:

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

Passing data to Master Page in ASP.NET MVC

Strongly Typed ASP.Net MVC Master Pages

问题是我不确定如何让 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; }
}

主视图数据

public class MasterViewData
{
    public IEnumerable<Page> Pages { get; set; }
}

当我构建解决方案时,出现以下构建错误:

"; expected" in ViewDataFactory.cs

哪个指向代码sn-p:

T Create<T>(IEnumerable<Page> pages) where T : MasterViewData, new()

我想我错过了一些重要的东西,我对此很陌生,任何帮助都将不胜感激!

【问题讨论】:

  • 我一直在寻找如何在母版页中呈现视图的答案。到目前为止,我发现的所有解决方案看起来像是工程师破解了一个非常必要的问题。我使用 ASP.net MVC 的次数越多,我发现的问题就越多,接下来是什么?

标签: c# asp.net asp.net-mvc asp.net-mvc-2


【解决方案1】:

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

抽象方法(以及接口方法)用分号代替主体。

【讨论】:

  • 希望这么简单,当我这样做时,我得到另一个构建错误:'Website.Models.ViewDataFactory' 没有实现接口成员 'Website.Models.IViewDataFactory.Create(System. Collections.Generic.IEnumerable)'
  • 那是因为它确实没有,我假设您使用的是 Visual Studio,如果是这种情况,请右键单击 ViewDataFactory 类声明中的 IViewDataFactory,然后选择 Implement Interface
  • 谢谢,到目前为止它解决了我的问题。但是我应该在实现的接口里面放什么。该解决方案按应有的方式构建,但在运行它时出现错误。 The method or operation is not implemented. 那是因为我里面还有throw new NotImplementedException();,但是我应该放什么里面呢?
  • 好吧,我对 MVC 几乎一无所知,语法错误引起了我的注意,但我无法帮助您解决实际问题。
  • 到目前为止,谢谢你,你解决了我的问题。我会再打开一段时间以获得更多帮助,然后我会将其标记为已回答。
【解决方案2】:

感谢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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    • 2013-02-12
    相关资源
    最近更新 更多