Html.DropDownList для проблемы привязки - PullRequest
4 голосов
/ 11 мая 2011

Итак, у меня есть две таблицы: products, единицы измерения .

Products: (id int, name varchar (20), id_um INT), где id_um - это ссылка на первичный ключ.таблицы measure_unit , а id - первичный ключ этой таблицы.

Measurement_unit: (id_um int, name varchar (20)).id_um - это первичный ключ, который я сопоставил двум, используя LINQ to SQL.

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

Я делаю это в контроллере для действия Создать (создать новый продукт):

var items = new List<SelectListItem>();
            foreach (var t in db.measurement_unit)
                items.Add(new SelectListItem() { Text = t.name.ToString(), Value =t.id_um.ToString() });
ViewData["UM"] = new SelectList(items, "Value", "Text");

Теперь для вида:

<%: Html.DropDownListFor(model=>model.id_um,  (IEnumerable <SelectListItem>)ViewData["UM"])%>

Но я получаю следующую ошибку:

The ViewData item that has the key 'id_um' is of type 'System.Int32' but must be of type 'IEnumerable<SelectListItem>'.

Я боролся с этой вещью раньше, и я успешно заставил ее работать раньше, но я случайно удалил этот проект.Пожалуйста, скажите мне, что я делаю не так?Спасибо!

1 Ответ

5 голосов
/ 11 мая 2011

Я бы порекомендовал вам использовать модель представления вместо ViewData.Это сделает код намного чище / безопаснее / удобнее в рефакторинге / включит Intellisense / облегчит юнит-тестирование / освободит магические струны /....:

public class MyViewModel
{
    public int Id { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

Контроллер:

public class HomeController: Controller
{
    public ActionResult Index() 
    {
        var model = new MyViewModel
        {
            Items = db.measurement_unit.Select(x => new SelectListItem
            {
                Value = x.id_um.ToString(),
                Text = x.name.ToString()
            })
        };
        return View(model);
    }
}

и, наконец, в строго типизированном виде:

<%= Html.DropDownListFor(
    x => x.Id,
    new SelectList(Model.Items, "Value", "Text")
) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...