我在ASP.NET MVC页面中有两个Address.ascx控件实例. h1Shipping Address/h1 % Html.RenderPartial("Controls/AddressControl"); % h1Billing Address/h1 % Html.RenderPartial("Controls/AddressControl"); % 当然,使用与此完全相同的代
<h1>Shipping Address</h1> <% Html.RenderPartial("Controls/AddressControl"); %> <h1>Billing Address</h1> <% Html.RenderPartial("Controls/AddressControl"); %>
当然,使用与此完全相同的代码,我将最终为地址中的每个字段使用相同的ID.我可以很容易地将字符串附加到字段的ID,所以我有’Street1_billing’和’Street1_shipping’,但我不清楚如何将其映射到模型.
什么是将模型映射到项目数组的最佳解决方案(在这种情况下仅为2).
我不知道任何ASP.NET“开箱即用”的解决方案.
注意:这与this question略有相似,我可以使用this solution from Scott Hanselman,但它不完全是我想要的.在我的情况下,我知道我有两个项目,所以它基本上是一个2项目数组,但我想知道是否有一个稍微更优雅的解决方案.
PS.我确信之前已经多次询问过,但我似乎无法用正确的搜索词来表达.如果你知道欺骗,请链接这个问题!
您可以拥有ViewModelOrderCheckoutViewModel { public Address ShippingAddress{get;set;} public Address BillingAddress{get;set;} }
如果具有该表单,则formelements的值将映射到ViewModel的右侧成员
<input type="text" name="ShippingAddress.StreetAddress1"><input>
从StreetAddress1到ShippingAddress.StreetAddress1没有简单而优雅的方法.
我的地址模型有以下形式:
public class Address { String StreetAddress1 { get; set } String StreetAddress2 { get; set } String City { get; set } String State { get; set } String Zip { get; set } String InstanceName{ get; set } }
我将InstanceName设置为属性的名称(ShippingAddress).
然后以这种形式定义表单元素
<input type="text" name="<%=Model.InstanceName%>.StreetAddress1"><input>
ascx的地方看起来并不常见.任何理由你不要把它放在共享和访问它
<% Html.RenderPartial("AddressControl",Model.ShippingAddress); %>
?