Проблема передачи ViewModel в частичное представление - PullRequest
0 голосов
/ 24 июня 2009

Мой класс 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>

Проблема или дилемма, с которой я столкнулся, заключается в том, что мне нужен не только p из foreach, но и весь экземпляр ItemViewModel, который первоначально был передан в мой View. Потому что мне нужно использовать Pers в этом foreach, а также иметь возможность ссылаться на Предметы. Поэтому я попытался установить для свойства Pers экземпляра класса ItemViewModel текущее значение p в foreach. Затем попытался отправить всю модель (теперь, когда у меня установлено свойство Pers для свойства), имеющего тип ItemViewModel, так что теперь я могу использовать свойство Pers для этого объекта, а также иметь возможность ссылаться на уже заполненное свойство Items. когда он попал в вид.

Итак, когда страница отображается, я получаю:

System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта. для этой строки:

<span class="xxx">*</span><label><%=Model.Pers.Name %></label>

Пока что я безуспешен, потому что я все еще получаю ошибку нулевой ссылки на свойство Pers, когда пытаюсь использовать ITemViewModel в моем Частичном представлении.

Ответы [ 2 ]

0 голосов
/ 24 июня 2009

Боже мой, я неправильно установил свойство. решена. Дух.

0 голосов
/ 24 июня 2009

Это может быть из-за того, что вашему файлу частичного просмотра нужна эта строка над 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...