Создание DropDownListFor в частичном представлении в MVC - PullRequest
3 голосов
/ 23 января 2012

Я создал частичное представление, в котором отображается выпадающий список

html.DropDownListFor(m => m.SelectOption, Model.SelectOption)

Я получаю сообщение об ошибке "Объект не ссылается на экземпляр ...."

ЕслиЯ положил код выше в моем представлении (aspx), он отлично работает без проблем.Но в частичном представлении я получаю ошибку.

Элементы управления текстовым полем в моем частичном представлении прекрасно работают с той же моделью.Я просто не могу просмотреть DropDownList.

1 Ответ

12 голосов
/ 23 января 2012

Вы фактически не показали, как вы вызываете частичное представление и действительно ли действие вашего контроллера передало модель этому представлению.

Убедитесь, что ваш контроллер правильно инициализировал модель.Поэтому, если мы предположим, что у вас есть следующая модель:

public class MyViewModel
{
    public string SelectedOption { get; set; }
    public IEnumerable<SelectListItem> SelectOptions { get; set; }
}

и следующее действие контроллера:

public ActionResult Foo()
{
    var model = new MyViewModel();
    model.SelectOptions = new[]
    {
        new SelectListItem { Value = "1", Text = "item 1" },
        new SelectListItem { Value = "2", Text = "item 2" },
        new SelectListItem { Value = "3", Text = "item 3" },
    };
    return View(model);
}

десять, вы можете получить соответствующее представление, которое будет вызывать частичное:

@model MyViewModel
@Html.Partial("_MyPartial", Model)

и _MyPartial.cshtml:

@model MyViewModel
@Html.DropDownListFor(x => x.SelectedOption, Model.SelectOptionOptions)

Обратите внимание, что вам нужно 2 свойства в вашей модели представления для создания раскрывающегося списка => скалярное свойство (SelectedOption), котороебудет использоваться для привязки выбранного значения и свойства коллекции, которое будет содержать список значений, которые вы хотите отобразить в раскрывающемся списке (SelectOptionOptions).

В вашем коде вы используете одно и то же свойство для обоих, что неверно:

@Html.DropDownListFor(m => m.SelectOption, Model.SelectOption)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...