Использование @Html.DropDownList с ViewModel

У меня есть модель просмотра, как показано ниже:

public class WhItemForm
{
    public virtual WhItem WhItem { get; set; }
    public virtual WhItemStock WhItemStock { get; set; }
}

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

public ActionResult Create()
    {
        ViewBag.WhBrandId = new SelectList(db.WhBrand, "Id", "Name");
        ViewBag.WhStockCardId = new SelectList(db.WhStockCard, "Id", "Name");
        ViewBag.WhLocationId = new SelectList(db.WhLocation, "Id", "Name");
        return View();
    }

У меня есть свойство BrandID в моей модели WHITEM, вот моя модель WHITEM.

public class WhItem
{
    public int Id { get; set; }

    public int WhBrandId { get; set; }
    public virtual WhBrand WhBrand { get; set; }

}

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

 <div class="form-group">
            @Html.LabelFor(model => model.WhItem.WhBrandId, "WhBrandId", new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("WhBrandId", String.Empty)
                @Html.ValidationMessageFor(model => model.WhItem.WhBrandId)
            </div>
        </div>

Я знаю, мне нужно передать это значение как WhItem.WhBrandId, так как я использую модель представления в своем представлении. Я могу сделать это для @html.TextBoxFor, но как я могу исправить свой раскрывающийся список, чтобы передать его значение как WhItem.WhBrandId контроллеру.

С уважением


person umki    schedule 24.04.2014    source источник
comment
Вы не можете использовать DropDownListFor? Вот так @Html.DropDownListFor(model => model.WhItem.WhBrandId, ViewBag.WhBrandId)?   -  person    schedule 24.04.2014
comment
Я думаю, да, это должен быть мой ответ, но я получаю синтаксическую ошибку. Могу ли я использовать viewbag как новый список?   -  person umki    schedule 24.04.2014
comment
В чем синтаксическая ошибка - я не использую ViewBag, поэтому не уверен, но, возможно, вам нужно явно указать SelectList, то есть (SelectList)ViewBag.WhBrandId?   -  person    schedule 24.04.2014
comment
Спасибо, кастинг (SelectList) решен.   -  person umki    schedule 24.04.2014


Ответы (1)


Сначала я предлагаю вам отредактировать ваш контроллер следующим образом:

    public ActionResult Create()
    {
        ViewBag.SelectList = new List<SelectListItem>
        {
            new SelectListItem{Text = "Text",Value = "Value"},
            new SelectListItem{Text = "Text",Value = "Value"},
            new SelectListItem{Text = "Text",Value = "Value"}
        };

        return View();
    }

После этого измените свой вид на это:

@Html.DropDownListFor(x => x.WhItem.WhBrandId, (List<SelectListItem>)ViewBag.SelectList)
person leskovar    schedule 24.04.2014
comment
Я хочу получить новый List‹SelectListItem› из моего контроллера в окне просмотра. Не могли бы вы отредактировать свой код? Я получаю сообщение об ошибке, когда хочу использовать viewbag. - person umki; 24.04.2014