我的ViewModel类(ItemViewModel.cs)如下所示:
公共类ItemViewModel {
public ItemViewModel(xxx.Product product)
{
this.product = product;
}
private readonly xxx.xxx.Product product;
private readonly Pers pers;
private readonly Item item;
public xxx.xxx.Product Product
{
get{ return product;}
}
public Item Item
{
get { return item; }
}
public ItemList Items
{
get { return product.Items; }
}
public Pers Pers
{
get { return pers; }
set { value = pers; }
}
public PersList PersList
{
get { return product.PersList; }
}
}
视图中定义了此代码(我拿出了一些其他案例行,只是为了展示其中一个例子):
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/MasterPages/Item.Master" Inherits="System.Web.Mvc.ViewPage<xxx.ViewModels.ItemViewModel>" %>
<% foreach (Pers p in Model.Perslist)
{
switch(p.DispType)
{
case DisType.Dropdown:
Model.Pers = p;
Html.RenderPartial("~/Views/Shared/Controls/Custom/PForm/DropDown.ascx",*Model);
break;
}
}
%>
RenderPartial看起来像这样:
<fieldset>
<div class="xxx">
<span class="xxx">*</span><label><%=Model.Pers.Name %></label>
<p class="xxx"><%=Model.Pers.Info %></p>
</div>
<div class="formField"><% Html.DropDownList(Model.Pers.Name, new SelectList(Model.Items[0].DropdownItems));%></div>
</fieldset>
我遇到的问题或困境是我不仅需要来自foreach的p,而且需要最初传递给我的View的整个ItemViewModel实例。因为我需要在foreach中使用Pers,并且能够引用Items。所以我尝试将ItemViewModel类实例的Pers属性设置为foreach中的当前p。然后尝试发送整个模型(现在我已经在属性上设置了Pers),这是ItemViewModel类型,这样我现在可以在该对象上使用属性Pers,并且仍然能够引用已填充的Items属性当它击中视图时。
因此,当页面呈现时,我得到:
System.NullReferenceException:未将对象引用设置为对象的实例。 对于这一行:
<span class="xxx">*</span><label><%=Model.Pers.Name %></label>
到目前为止,我不成功,因为当我尝试在Partial View中使用ITemViewModel时,仍然在属性Pers上出现空引用错误。
答案 0 :(得分:0)
这可能是因为您的部分视图文件需要在html上方的这一行:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<xxx.ViewModels.**ItemViewModel**>" %>
所以这就是你的局部视图的样子:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<xxx.ViewModels.**ItemViewModel**>" %>
<fieldset>
<div class="xxx">
<span class="xxx">*</span><label><%=Model.Pers.Name %></label>
<p class="xxx"><%=Model.Pers.Info %></p>
</div>
<div class="formField"><% Html.DropDownList(Model.Pers.Name, new SelectList(Model.Items[0].DropdownItems));%></div>
</fieldset>
答案 1 :(得分:0)
天哪,我把财产弄错了。解决。咄。