DropDownList, почему он получает ключ и больше ничего - PullRequest
0 голосов
/ 02 июня 2011

У меня есть свойство в моей модели, очень простое:

enter image description here

Теперь этот dropDown работает неправильно

@Html.DropDownListFor(m => m.Camp, new SelectList(ViewBag.Camps, "Id", "Name"))

возвращает null вместо выбранного Лагеря, но если я изменю это на:

@Html.DropDownListFor(m => m.Camp.Id, new SelectList(ViewBag.Camps, "Id", "Name"))

Это вернет мне Camp объект с правильным Id, но Name будет по-прежнему null.

Почему?

UPD:

А теперь еще одна проблема, если я выберу второй подход, он облажается с ненавязчивой проверкой.Хотя я смогу получить правильный лагерь на основе выбранного идентификатора.

1 Ответ

1 голос
/ 02 июня 2011

Это нормально. Только Id публикуется в действии контроллера. Вот как работают выпадающие формы. Так что это все, на что вы можете надеяться. Затем вы будете использовать это Id для получения соответствующего объекта Camp из базы данных:

[HttpPost]
public ActionResult Foo([Bind(Prefix = "Camp")]int id)
{
    Camp camp = Repository.GetCamp(id);
    ...
}

Также, пожалуйста, избавьтесь от этого ViewBag и используйте модель реального вида:

public class CampViewModel
{
    public int Id { get; set; }
    public IEnumerable<SelectListItem> Camps { get; set; }
}

и в контроллере:

public ActionResult Index()
{
    var model = new CampViewModel
    {
        Camps = Repository.GetCamps().Select(x => new SelectListItem
        {
            Value = x.Id.ToString(),
            Text = x.Name
        })
    };
    return View(model);
}

[HttpPost]
public ActionResult Index(int id)
{
    Camp camp = Repository.GetCamp(id);
    ...
}

и вид:

@model CampViewModel
@using (Html.BeginForm())
{
    @Html.DropDownListFor(
        x => x.Id,
        new SelectList(Model.Camps, "Value", "Text")
    )
    <input type="submit" value="OK" />
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...