Asp.NET MVC Razor DropDownList и документ с табличной частью

Мне нужно сделать выпадающий список, который выбирает данные из связанной таблицы.

Я использовал пример из MSDN, но он не работает.

public ActionResult Create()
{
    TypeItemsDropDownList();
    return View(new Item());
}

//
// POST: /Item/Create

[HttpPost]
public ActionResult Create([Bind(Include = "idItem,nameItem,priceItem,quantity,inStock,descrItem,idTypeItem")]Item item)
{
    try
    {
        if (ModelState.IsValid)
        {
            iac.StoreNewItem(item);
            return RedirectToAction("Index");
        }
    }
    catch (System.Data.DataException)
    {
        //Log the error (add a variable name after DataException) 
        ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists, see your system administrator.");
    }
    TypeItemsDropDownList(item.idTypeItem);
    return View(item); 
}

private void TypeItemsDropDownList(object selectedTypeItem = null)
{
    cabproddbEntities db = new cabproddbEntities();
    var typeQuery = from d in db.TypeItem
                    orderby d.nameTypeItem
                    select d;
    ViewBag.idTypeItem = new SelectList(typeQuery, "idTypeItem", "nameTypeItem", selectedTypeItem);
}

Ошибка происходит здесь:

<div class="editor-label">
    <label class="control-label col-md-2" for="idTypeItem">Тип продукции</label>
</div>
<div class="editor-field">
    @Html.DropDownList("idTypeItem", String.Empty)
    @Html.ValidationMessageFor(model => model.idTypeItem)
</div>

на этой линии: @Html.DropDownList("idTypeItem", String.Empty)

Стол TypeItem есть данные.

Брошенное исключение: System.Data.EntityCommandExecutionException со следующими деталями:

Типы данных text, ntext и image нельзя сравнивать или сортировать, кроме случаев использования оператора IS NULL или LIKE.

1 ответ

Решение

Ваша проблема в том, что вы не связываете SelectList в раскрывающемся списке. Использовать DropDownListFor() помощник и ссылки на ваш список выбора в нем. Как показано ниже.

Ваши соглашения об именах также немного отличаются, и это может привести вас в замешательство.

@Html.DropDownListFor(m => Model.selectedItem, ViewBag.idTypeItem)
Другие вопросы по тегам