【发布时间】:2010-11-05 15:00:24
【问题描述】:
我的 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; }
}
}
视图中定义了这段代码(我取出了一些其他的 case 行,只是为了展示其中的一个作为示例):
<%@ 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 并且能够引用这些项目。所以我尝试将 ItemViewModel 类实例的 Pers 属性设置为 foreach 中的当前 p。然后尝试发送类型为 ItemViewModel 的整个模型(现在我在属性上设置了 Pers),这样我现在可以在该对象上使用属性 Pers 并且仍然能够引用已经填充的 Items 属性当它击中视图时。
所以当页面呈现时,我得到:
System.NullReferenceException:对象引用未设置为对象的实例。 对于这一行:
<span class="xxx">*</span><label><%=Model.Pers.Name %></label>
到目前为止,我没有成功,因为当我尝试在我的部分视图中使用 ITemViewModel 时,我仍然在属性 Pers 上遇到空引用错误。
【问题讨论】:
标签: asp.net-mvc