我開始用nhibernate和asp mvc2開發Web應用程序(應用程序組合)。如何高效地用asp mvc和nhibernate引用(dropdownList)更新模型
我有一些困難來正確地改變應用程序的類別。
這裏是我的模型:
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");
}
我能屁股IGN一個新的類別,但如果我更改爲不同的類別,我得到了以下信息:
從2改變Core.Model.Category的實例標識符3
這似乎是因爲defaultmodelbinder正在更新指定類別的密鑰,而不是使用新的新密鑰分配新類別。
更新實體及其所有參考的正確方法是什麼?
我可以使用自定義視圖模型,將其綁定到控制器中,然後將其映射到我的域模型。但我擔心它會給我太多的工作(最終我的應用程序模型中將有大約100個屬性,30個引用和5-6個列表)。
Automapper在這種情況下可以用來更新現有的域模型嗎?
你如何處理這種更新?
您是否找到解決此問題的方法。我現在正在遇到一模一樣的問題。我正在使用MVC3 – nabeelfarid 2011-06-07 23:06:43