【问题标题】:How to efficiently update models with references(dropdownList )with asp mvc and nhibernate如何使用 asp mvc 和 nhibernate 有效地更新带有引用(下拉列表)的模型
【发布时间】:2010-07-13 09:13:35
【问题描述】:

我开始用 nhibernate 和 asp mvc2 开发一个 web 应用程序(应用程序组合)。

我在正确更改应用程序的类别时遇到了一些困难。
这是我的模型:

 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; }
 }

我的视图模型:

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");
    }

我可以分配一个新类别,但如果我更改为不同的类别,我会收到以下消息:

Core.Model.Category 实例的标识符从 2 更改为 3

这似乎是因为 defaultmodelbinder 正在更新分配类别的键,而不是使用新的新键分配新类别。

使用所有引用更新实体的正确方法是什么?
我也许可以使用自定义视图模型,将其绑定到控制器中,然后将其映射到我的域模型。但我担心它会给我太多的工作(最后我的应用程序模型中将有大约 100 个属性、30 个引用和 5-6 个列表)。
在这种情况下,Automapper 是否可以用来更新现有的域模型?
您如何处理此类更新?

【问题讨论】:

  • 你找到解决这个问题的方法了吗?我现在正在遇到一模一样的问题。我正在使用 MVC3

标签: nhibernate asp.net-mvc-2 updatemodel


【解决方案1】:

除非您有一个非常简单的应用程序,否则很难将相同的模型用作视图模型和域模型。有一个单独的域模型的另一个原因是,为所有 100 个属性显示一个巨大的表单不是很用户友好。您可以更好地向用户显示不同任务的不同表单。当您这样做时,无论如何您最终都会为一个域实体获得不同的视图模型。

【讨论】:

  • 好的,我可以轻松地将我的模型拆分为几个视图模型,但是你如何更新你的模型呢?通过将更新的视图模型的属性手动复制到域模型?您如何处理列表中的更新?通过循环遍历列表并比较项目?
  • 确实如此。大多数时候,我在域模型中调用一个方法来更改属性。方法名称是域模型的重要组成部分,因为它确定了域的使用方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 2012-08-17
相关资源
最近更新 更多