我目前正在创建一个CMS系统,发现以下不起作用。
我确实有一个不太理想的解决方法,而且感觉很脏。我现在对此很满意,并且对不同的方法并不真正感兴趣(但不要让它阻止你回答)。我所追求的是某种关于它为什么不起作用的解释——它是 ASP.NET MVC 中的一个错误吗?
很难解释,所以我会让我的代码(减去很多绒毛)来说话......希望它有意义!
编辑:编译器似乎完全忽略了第二个母版页的“继承”属性——见问题的底部。
ContentViewData.cs - 注意它继承自BaseViewData
public class ContentViewData : BaseViewData
{
public MyCMS.Data.Models.Content ContentItem { get; set; }
}
Site.Master - 注意BaseViewData类型的强类型视图数据
<%@ Master
Language="C#"
Inherits="System.Web.Mvc.ViewMasterPage<MyCMS.WebSite.ViewData.BaseViewData>" %>
Content.Master - 注意ContentViewData类型的强类型视图数据以及它是Site.Master的子母版页的事实
<%@ Master
Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewMasterPage<MyCMS.WebSite.ViewData.ContentViewData>" %>
...blah blah blah...
<% Html.RenderPartial("ContentItemImage", Model.ContentItem); %>
内容项目图像.ascx
<%@ Control
Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<MyCMS.Data.Models.Content>" %>
<% if (Model.HasPrimaryPhoto)
{ %>
<img src="/content/photos/<%= Model.GetPrimaryPhoto.ThumbFileName %>"
title="<%= Model.GetPrimaryPhoto.Caption %>" />
<% } %>
现在在 Content.Master 中,如果我尝试渲染 ContentItemImage 部分并像我一样引用 ContentViewData 对象(特别是“ContentItem”属性)上的属性 - 在下面重复。
<% Html.RenderPartial("ContentItemImage", Model.ContentItem); %>
如果跌倒在那条线上并出现以下错误
编译错误
CS1061:“object”不包含“ContentItem”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“ContentItem”(您是否缺少 using 指令或程序集引用?)
但是,如果我像这样改变事情,一切都很好而且花花公子。
Content.Master - 请注意,我将整个模型(ContentViewData 对象)传递给 RenderPartial(),而不是尝试引用 ContentViewData 对象上的属性
<%@ Master
Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewMasterPage<MyCMS.WebSite.ViewData.ContentViewData>" %>
...blah blah blah...
<% Html.RenderPartial("ContentItemImage", Model); %>
ContentItemImage.ascx - 注意从 MyCMS.Data.Models.Content 更改为 ContentViewData 类的强类型视图数据。
<%@ Control
Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<MyCMS.WebSite.ViewData.ContentViewData>" %>
<% if (Model.ContentItem.HasPrimaryPhoto)
{ %>
<img src="/content/photos/<%= Model.ContentItem.GetPrimaryPhoto.ThumbFileName %>"
title="<%= Model.ContentItem.GetPrimaryPhoto.Caption %>" />
<% } %>
所以,是的,这行得通,但它不是不在场证明。
在此先感谢,查尔斯。
编辑:有趣的是,编译器似乎完全忽略了第二个母版页的“继承”属性。
例如。我可以做到这一点,它仍然可以毫无怨言地编译......
<%@ Master
Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewMasterPage<ThisDoesntExist.AtAll>" %>