Как эффективно обновить модели со ссылками (dropdownList) с asp mvc и nhibernate

Я начал разрабатывать веб-приложение (набор приложений) с nhibernate и asp mvc2.

Я испытываю некоторые затруднения для надлежащего изменения категории приложения.
Вот мои модели:

 public class Application 
 {
    public virtual int  Application_ID{ get; private set; }
    public virtual string Name { get; set; }
    public virtual Category Category { get; set; }
 }
 public class Category : ILookupItem
 {
    public virtual int Category_ID { get; set; }
    public virtual string Name { get;  set; }
 }

Мой viewModel:

public class ApplicationEditModel
{
    public Application Application { get; set; }
    public SelectList Categories { get; set; }
}

Моя форма:

<% Html.BeginForm(new {id= Model.Application.Application_ID }); %>
<table>
<tr>
    <td><%=Html.LabelFor(x => x.Application.Application_ID)%></td>
    <td><%=Html.DisplayFor(x=>x.Application.Application_ID) %></td>
</tr>
<tr>
    <td><%=Html.LabelFor(x=>x.Application.Name) %></td>
    <td><%=Html.EditorFor(x=>x.Application.Name) %></td>
</tr>
<tr>
    <td><%=Html.LabelFor(x=>x.Application.Category) %></td>
<td><%=Html.DropDownListFor(x=>x.Application.Category.Category_ID,Model.Categories,"Select a category") %></td>
</tr>
<tr><td><input type="submit" /></td></tr>
</table>
<% Html.EndForm(); %>

Мое действие контроллера:

    [HttpPost]
    public ActionResult Edit(int id, FormCollection collection)
    {   
        Application app =  _service.FindById(id);
        TryUpdateModel<Application>(app, "Application");
        _service.CommitChanges();
        return RedirectToAction("Index");
    }

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

идентификатор экземпляра Ядра. Модель. Категория была изменена от 2 до 3

Это, кажется, потому что defaultmodelbinder обновляет ключ присвоенной категории вместо того, чтобы присвоить новую категорию с новым новым ключом.

Что корректный путь состоит в том, чтобы обновить объект со всеми своими ссылками?
Я мог, возможно, использовать пользовательскую модель представления, связать ее в контроллере и затем отобразить ее на мою модель предметной области. Но я боюсь, что это даст мне слишком много работы (в конце, у меня будет приблизительно 100 свойств, 30 ссылок и 5-6 списков в моей прикладной модели).
Автокартопостроитель мог быть полезным в этом случае для обновления существующей модели предметной области?
Как Вы обрабатываете этот вид обновления?

1
задан Lobo 13 July 2010 в 09:13
поделиться

1 ответ

Очень сложно использовать одну и ту же модель как в модели представления, так и в модели предметной области, если у вас нет очень простого приложения. Еще одна причина иметь отдельную модель предметной области заключается в том, что не очень удобно отображать огромную форму для всех 100 свойств. Вы можете лучше показать пользователю разные формы для разных задач. Когда вы это сделаете, вы все равно получите разные модели просмотра для одного объекта домена.

2
ответ дан 2 September 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: