【发布时间】:2011-07-21 17:47:48
【问题描述】:
我有两个 POCO 类,一个用户和一个地址。地址是一个复杂的对象,一个用户有一个地址。我想创建一个单一的用户视图,允许通过 MVC 脚手架 + 实体框架 + 存储库模式在同一表单上创建/编辑地址。创建用户视图工作正常,但是当我尝试在用户编辑视图中更改地址时,更改不会传播。如何强制更改从用户视图向下传播到地址对象?其他一切都是自动生成的。
POCO 类
public class TestDB : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
public DbSet<Address> Addresses { get; set; }
public DbSet<User> Users { get; set; }
}
public class Address
{
public int ID { get; set; }
public string Street1 { get; set; }
public string Street2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string PostalCode { get; set; }
public string Country { get; set; }
}
public class User
{
public int ID { get; set; }
public string UserName { get; set; }
/*[ForeignKey("Address")]
public int AddressID { get; set; }*/
public virtual Address Address { get; set; }
}
编辑用户视图
<% using (Html.BeginForm()) { %>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>User</legend>
<%: Html.HiddenFor(model => model.ID) %>
<%: Html.Partial("CreateOrEdit", Model) %>
<legend>Address</legend>
<div class="editor-label">
<%: Html.LabelFor(model => model.Address.Street1) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.Address.Street1)%>
<%: Html.ValidationMessageFor(model => model.Address.Street1)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Address.Street2)%>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.Address.Street2)%>
<%: Html.ValidationMessageFor(model => model.Address.Street2)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Address.City)%>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.Address.City)%>
<%: Html.ValidationMessageFor(model => model.Address.City)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Address.State)%>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.Address.State)%>
<%: Html.ValidationMessageFor(model => model.Address.State)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Address.PostalCode)%>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.Address.PostalCode)%>
<%: Html.ValidationMessageFor(model => model.Address.PostalCode)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Address.Country)%>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.Address.Country)%>
<%: Html.ValidationMessageFor(model => model.Address.Country)%>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
地址编辑器模板:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<AddressTest.Models.Address>" %>
<script src="<%: Url.Content("~/Scripts/jquery-1.5.1.min.js") %>" type="text/javascript"></script>
<script src="<%: Url.Content("~/Scripts/jquery.validate.min.js") %>" type="text/javascript"></script>
<script src="<%: Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js") %>" type="text/javascript"></script>
<% using (Html.BeginForm()) { %>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>Address</legend>
<%: Html.HiddenFor(model => model.ID) %>
<div class="editor-label">
<%: Html.LabelFor(model => model.Street1) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.Street1) %>
<%: Html.ValidationMessageFor(model => model.Street1) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Street2) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.Street2) %>
<%: Html.ValidationMessageFor(model => model.Street2) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.City) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.City) %>
<%: Html.ValidationMessageFor(model => model.City) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.State) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.State) %>
<%: Html.ValidationMessageFor(model => model.State) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.PostalCode) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.PostalCode) %>
<%: Html.ValidationMessageFor(model => model.PostalCode) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Country) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.Country) %>
<%: Html.ValidationMessageFor(model => model.Country) %>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
更改为用户编辑视图:
<% using (Html.BeginForm()) { %>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>User</legend>
<%: Html.HiddenFor(model => model.ID) %>
<%: Html.Partial("CreateOrEdit", Model) %>
<%: Html.Editor("Address", Model.Address) %>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
【问题讨论】:
标签: asp.net-mvc-3 entity-framework-4 ef-code-first