ASP.NET MVC Masterpage代码文件

时间:2009-03-15 19:53:56

标签: asp.net-mvc

任何人都可以指出这段代码可能出错的地方。我正在尝试为母版页创建一个部分类。

母版页类:

namespace MuniWeb.Models.SiteMaster{

public class BaseViewData
{
    public string Title { get; set; }
    public string MetaKeywords { get; set; }
    public string MetaDescription { get; set; }
}

public partial class Site : System.Web.Mvc.ViewMasterPage<MuniWeb.Models.SiteMaster.BaseViewData>
{
    public Site()
    {
        ViewData.Model = new BaseViewData();
    }
}}

母版页:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<MuniWeb.Models.SiteMaster.BaseViewData>" %>

错误:

Object reference not set to an instance of an object.
Line 33:             <div id="footer">
Line 34:                 ApplicationID:
Line 35:                 <%= Model.Title %>
Line 36:             </div>
Line 37:         </div>

我只是以此为例。我想要使​​用的代码需要为每个页面触发以检查某些参数,这就是它在母版页中的原因。

3 个答案:

答案 0 :(得分:0)

你不应该做一个局部课。您的控制器操作代码是什么样的?该错误看起来可能是因为没有将View(以及它的主页)交给模型。

尝试这样的事情:

namespace MuniWeb.Website.ViewDataModels {

    public class BaseViewData
    {
        public string Title { get; set; }
        public string MetaKeywords { get; set; }
        public string MetaDescription { get; set; }
    }

    public class SubViewData : BaseViewData
    {
        public IList<Thing> Things { get; set; }
    }
}

然后像你一样定义你的母版页:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<MuniWeb.Website.ViewDataModels.BaseViewData>" %>

现在在您的控制器中

public ActionResult Index()
{
    SubViewData viewData = new SubViewData();
    viewData.Title = "Page Title";
    viewData.MetaKeywords = "This, that, and the other";
    viewData.MetaDescription = "A really great page about this, that, and the other.";

    viewData.Things = _myRepository.GetThings();

    return View(viewData);
}

看看情况如何......

我会问为什么MasterPage NEEDS强烈键入ViewData。我理解是的,有时在masterpages中需要强类型的viewdata,但通常你应该能够使用ViewData名称值集合。

答案 1 :(得分:0)

您的母版页不应继承Site而不是System.Web.Mvc.ViewMasterPage吗?没有您的母版页定义实际引用Site类的位置。

答案 2 :(得分:0)

在您的代码中,

public partial class Site :  
         System.Web.Mvc.ViewMasterPage<MuniWeb.Models.SiteMaster.BaseViewData>
{
    public Site()
    {
        ViewData.Model = new BaseViewData();
    }
}}

ViewData.Model = new BaseViewData();没有必要。 BaseViewData应该通过控制器传入。换句话说,您的所有视图都应该查找继承基本视图的View。母版页将具有与基类BaseViewData相同的对象。这样做的控制器代码似乎是正确的。

另一件似乎与我的类似代码不同的是 Inherits = System.Web.Mvc.ViewMasterPage<MuniWeb.Models.SiteMaster.BaseViewData>应该继承 = my.codebehind.class,那么你的代码隐藏会继承ViewMasterPage<MuniWeb.Models.SiteMaster.BaseViewData>

我只是没有看到这样的代码,也许它有用吗?