ASP.NET MVC выбирает объект из списка - PullRequest
0 голосов
/ 17 апреля 2011

У меня есть два класса Item и Category.Предметы могут принадлежать к одной категории.В реализации я использую NHibernate и Item имеет свойство Category (типа Category).Оба класса являются сущностями.

Интересно, как сделать возможным в представлении для редактирования элемента возможность выбора категории, например, из списка или раскрывающегося списка.Есть HTML-помощники, такие как Html.DropDownListFor, но я не знаю, как заставить его работать, когда мне нужно выбрать объект (NHibernate не делает CategoryId для Item доступным).Кто-нибудь может мне помочь с этой проблемой?

Заранее спасибо
Лукаш

Ответы [ 2 ]

0 голосов
/ 17 апреля 2011

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

public class CategoryViewModel
{
    public int SelectedItemId { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

и тогда у вас будет действие контроллера, которое выберет модель из хранилища и отобразит ее в этой модели вида:

public ActionResult Index()
{
    Category category = ...
    // Example using AutoMapper
    CategoryViewModel viewModel = Mapper.Map<Category, CategoryViewModel>(category);
    return View(viewModel);
}

и в представлении просто:

@Html.DropDownListFor(
    x => x.SelectedItemId,
    new SelectList(Model.Items, "Value", "Text")
)

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

0 голосов
/ 17 апреля 2011

Я использую это:

<div class="editor-label">
    @Html.LabelFor(model => model.MemberId)
</div>
<div class="editor-field">
    @Html.DropDownListFor(model => model.MemberId, new SelectList(ViewBag.membersDD as System.Collections.IEnumerable, "Id", "Name"))
    @Html.ValidationMessageFor(model => model.MemberId)
</div>

Где «Id» - это имя свойства (из сущности Member), которое используется в качестве значения для опции. Второй параметр для текста опции. В моем случае это свойство Name элемента Member.

И я заполняю membersDD в контроллере следующим образом:

ViewBag.membersDD = memberProvider.GetMembers();

Я использую Entity Framework, не знаю, так ли это с NHibernate.

Кстати: этот фрагмент взят из моего действия по редактированию для объекта «Задача» (назначенного некоторому участнику, который можно выбрать из раскрывающегося списка).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...