首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用asp mvc和nhibernate有效地使用引用(DropdownList)更新模型

如何使用asp mvc和nhibernate有效地使用引用(DropdownList)更新模型
EN

Stack Overflow用户
提问于 2010-07-13 09:13:35
回答 1查看 304关注 0票数 1

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

要正确地更改应用程序的类别,我有一些困难。

以下是我的模特:

代码语言:javascript
复制
 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:

代码语言:javascript
复制
public class ApplicationEditModel
{
    public Application Application { get; set; }
    public SelectList Categories { get; set; }
}

我的表格:

代码语言:javascript
复制
<% 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(); %>

我的主计长行动:

代码语言:javascript
复制
    [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可以用来更新现有的域模型吗?

您是如何处理这种更新的?

EN

回答 1

Stack Overflow用户

发布于 2010-07-13 10:25:28

除非您有一个非常简单的应用程序,否则很难使用与视图和域模型相同的模型。另一个需要单独使用域模型的原因是,为所有100个属性显示一个庞大的表单并不是非常方便用户。您可以更好地为不同的任务向用户展示不同的表单。当您这样做,您结束了不同的视图模型的一个领域实体无论如何。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3235675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档