无法将ViewModel传递给部分视图

时间:2009-06-24 18:41:14

标签: asp.net-mvc

我的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上出现空引用错误。

2 个答案:

答案 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)

天哪,我把财产弄错了。解决。咄。