当前位置 : 主页 > 网络编程 > ASP >

asp.net-mvc – 如何在ASP.NET MVC的同一页面中使用相同.ascx的两个实例?

来源:互联网 收集:自由互联 发布时间:2021-06-24
我在ASP.NET MVC页面中有两个Address.ascx控件实例. h1Shipping Address/h1 % Html.RenderPartial("Controls/AddressControl"); % h1Billing Address/h1 % Html.RenderPartial("Controls/AddressControl"); % 当然,使用与此完全相同的代
我在ASP.NET MVC页面中有两个Address.ascx控件实例.

<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.我确信之前已经多次询问过,但我似乎无法用正确的搜索词来表达.如果你知道欺骗,请链接这个问题!

您可以拥有ViewModel

OrderCheckoutViewModel
{
    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); %>

网友评论