То же частичное представление на одной странице, как справиться с переплетом? - PullRequest
0 голосов
/ 02 июня 2011

Я все еще новичок в MVC.В настоящее время у меня есть страница добавления человека, эта страница содержит имя, фамилию и домашний адрес человека, который является сложным объектом (включая адресную строку1, адресную строку2, состояние и т. Д.), Адрес доставки (такой же, как и домашний адрес).

Итак, я хотел бы создать частичное представление, которое будет использоваться для отображения адреса, но когда я отправляю форму, я не могу различить, какое значение для домашнего адреса, потому что домашний адрес и адрес доставки отображаются одинаковоимя в форме.

MyClass

 Public class Person
    {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Gender { get; set; }
    public int DateOfBirthMonth { get; set; }
    public Gender Sex { get; set; }

    public AddressModel HomeAddress { get; set; }
    public AddressModel DeliveryAddress { get; set; }

    public Person()
    {
        HomeAddress = new AddressModel();
        DeliveryAddress = new AddressModel();
    }
}

    public class AddressModel
    {
      public string Addr1 { get; set; }
      public string Addr2 { get; set; }
      public string Suburb { get; set; }
   }

public enum Gender
{
    Male = 1,
    Female = 2
}

Мой адрес Частичное представление

@model MvcApplication1.Models.AddressModel

<fieldset>
<legend>Address</legend>

<div class="editor-label">
    @Html.LabelFor(model => model.Addr1)
</div>
<div class="editor-field">

    @Html.TextBoxFor(model => model.Addr1)
    @Html.ValidationMessageFor(model => model.Addr1)
</div>

<div class="editor-label">
    @Html.LabelFor(model => model.Addr2)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Addr2)
    @Html.ValidationMessageFor(model => model.Addr2)
</div>

<div class="editor-label">
    @Html.LabelFor(model => model.Suburb)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Suburb)
    @Html.ValidationMessageFor(model => model.Suburb)
</div>

Добавить страницу пользователя

  @using MvcApplication1.Models
  @model MvcApplication1.Models.Person

 @{
    ViewBag.Title = "AddPerson";
  }

AddPerson

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>Person</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.FirstName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.FirstName)
        @Html.ValidationMessageFor(model => model.FirstName)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.LastName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.LastName)
        @Html.ValidationMessageFor(model => model.LastName)
    </div>


    <div class="editor-label">
        @Html.LabelFor(model => model.Gender)
    </div>        
    <div class="editor-field">
        @Html.DropDownListFor(m => m.Gender, Model.Sex.ToSelectList())
        @Html.ValidationMessageFor(model => model.Sex)
    </div>        


    <div class="editor-field">           
        @{Html.RenderPartial("_Address", Model.HomeAddress);}
    </div> 
    <div class="editor-field">           
        @{Html.RenderPartial("_Address", Model.DeliveryAddress);}
    </div> 
    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>

}

@ Html.ActionLink («Вернуться к списку», «Индекс»)

1 Ответ

2 голосов
/ 02 июня 2011

Я нашел здесь вероятную проблему: два вложенных свойства модели одного и того же сложного типа

В представлении AddPerson вы можете использовать:

   @{Html.EditorFor(model => model.HomeAddress, "_Address");}
   @{Html.EditorFor(model => model.DeliveryAddress, "_Address");}

вместо:

<div class="editor-field">           
    @{Html.RenderPartial("_Address", Model.HomeAddress);}
</div> 
<div class="editor-field">           
    @{Html.RenderPartial("_Address", Model.DeliveryAddress);}
</div> 
<p>
    <input type="submit" value="Create" />
</p>
...