1

我需要一些关于如何最好地实现基于列表的局部视图并在页面上多次实现的建议。

所以鉴于此:

<div>
 <b>Contact Name</b>
 @Html.TextBoxFor(m => m.ApplicationDetail.Name, new { @class = "formInputSmall" })@Html.ValidationMessageFor(model => model.ApplicationDetail.Name)          
 <b>Current Address</b>
   @Html.Partial("_address", Model.Address)
 <b>Previous Address</b>
    @Html.Partial("_address", Model.Address)
</div>

我有一个复杂的模型,它有一个标题记录并且可以包含多个地址。

模型页面类

public class EntityDetails
{
    public ApplicationDetail ApplictaionDetails{ get; set; }
    public List<Address> Address { get; set; }
}

地址部分

@model Application.Models.DataModels.Address
@Html.TextBoxFor(m => m.AddressLine1, new { @class = "formInputSmall" })@Html.ValidationMessageFor(model => model.AddressLine1)
@Html.TextBoxFor(m => m.AddressLine2, new { @class = "formInputSmall" })@Html.ValidationMessageFor(model => model.AddressLine2)
@Html.TextBoxFor(m => m.City, new { @class = "formInputSmall" })@Html.ValidationMessageFor(model => model.City)
@Html.TextBoxFor(m => m.Postcode, new { @class = "formInputSmall" })@Html.ValidationMessageFor(model => model.Postcode)
@Html.DropDownListFor(m => m.Country, new SelectList(ViewBag.CountryType, "ID", "Value"), "Select...", null)@Html.ValidationMessageFor(model => model.Country)

我不知道如何区分不同类型的地址,因为地址表包含不同的类型。

我能否就如何最好地实现我想要实现的目标提出一些建议。我不反对它被撕开。

4

2 回答 2

0
foreach (var address in Model.Address)
{
    @Html.Partial("_address", address)
}

这不就是你所需要的吗?地址类型不同是什么意思?如果您的意思是当前地址与以前的地址与任何其他地址类型,那么我说您有不同的地址类型,您需要引入一个Enum地址类型:

public Enum AddressTypes
{
    Current,
    Previous
}

然后在你的类中使用它Enum作为一个属性,如下所示:Address

public class Address
{
    public AddressTypes AddressType {get; set;}
}

因此,您可以在局部视图中区分不同的地址类型。

于 2013-05-23T13:05:46.150 回答
0

您应该为此使用 EditorTemplates,而不是部分。EditorTemplates 是专门为这个(和类似的)问题而设计的。

http://blogs.msdn.com/b/nunos/archive/2010/02/08/quick-tips-about-asp-net-mvc-editor-templates.aspx

默认情况下,部分不解决格式化嵌套表单字段以供模型绑定器正确读取的许多问题。您可以使用 Partials 来做到这一点,但您必须做额外的工作。EditorTemplates 会为您解决这个问题。

于 2013-07-12T16:54:10.700 回答