модельные связующие для сложных типов

#asp.net #asp.net-mvc-3

#asp.net #asp.net-mvc-3

Вопрос:

У меня есть следующая модель:

  public class Customer
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public Address BillingAddress { get; set; }
        public Address ShippingAddress { get; set; }
    }
  

где адрес:

 public class Address
    {
        public int Id { get; set; }
        public string Street { get; set; }
        public string City { get; set; }
    }
  

Я хочу создать форму / представление, я создал представление :

Создать

 <div>
    <label>First Name</label>
    <input name="FirstName" />
</div>

<div>
    <label>Last Name</label>
    <input name="LastName" />
</div>

 <div>
    <label>Billing Address</label>
    <input name="BillingAddress" />
</div>

 <div>
    <label>Shipping Address</label>
    <input name="ShippingAddress" />
</div>

<div>
    <input type="submit" value="Save" />
</div>

</form>
  

Я хочу показать полный адрес, я имею в виду город и улицу. Нужно ли мне создавать частичное представление или что? Мне нужно опубликовать это представление в следующем ActionResult:

  [HttpPost]
        public ActionResult Create(Customer customerToCreate)
        {
            return View();
        }
  

Пожалуйста, предложите решение

Ответ №1:

Простое решение, переопределить toString() по адресу:

 public class Address
{
    public int Id { get; set; }
    public string Street { get; set; }
    public string City { get; set; }

    public override ToString()
    {
        return string.Format("{0} {1}",Street,City);
    }
}
  

И на ваш взгляд:

 @model Customer

<div>
    <label>First Name</label>
    @Html.TextBoxFor<Customer,string>(m => m.Firstname)
</div>

<div>
    <label>Last Name</label>
    @Html.TextBoxFor<Customer,string>(m => m.Firstname)
</div>

<div>
    <label>Billing Address</label>
    @Html.TextBoxFor<Customer,string>(m => m.BillingAddress)
</div>

<div>
    <label>Shipping Address</label>
    @Html.TextBoxFor<Customer,string>(m => m.ShippingAddress)
    <input name="ShippingAddress" />
</div>

<div>
    <input type="submit" value="Save" />
</div>
  

Комментарии:

1. могу ли я сделать это, не используя строго типизированную модель? Я имею в виду без @Html.TextBoxFor<Customer,string>(m => m.ShippingAddress). Я создал частичное представление для адреса и использовал его, но метод post create не получает значения адреса

Ответ №2:

создайте строго типизированный вид. тип клиента.