【问题标题】:Trouble passing ViewModel to Partial View将 ViewModel 传递给局部视图时遇到问题
【发布时间】: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


    【解决方案1】:

    这可能是因为您的局部视图文件需要在您的 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>
    

    【讨论】:

    • 实际上我的部分视图中确实有它,类型 ItemViewModel..忘记添加我已经有这个了。
    • 我的部分视图顶部确实有这个:" %>
    【解决方案2】:

    天哪,我设置了错误的属性。解决。呵呵。

    【讨论】:

      猜你喜欢
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      相关资源
      最近更新 更多