任何人都可以指出这段代码可能出错的地方。我正在尝试为母版页创建一个部分类。
母版页类:
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>
我只是以此为例。我想要使用的代码需要为每个页面触发以检查某些参数,这就是它在母版页中的原因。
答案 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>
。
我只是没有看到这样的代码,也许它有用吗?