2008-11-28 7 views
2

Я создал сильно типизированных LocationViewData с свойствами, какстрого типизированных ViewData

public Location location { get; set; } 

Location сама модель, со свойствами Address, Country, и так далее.

В контроллере у меня есть:

public ActionResult Edit(int id) 
{ 
    LocationViewData ld = new LocationViewData(); 
    ... 
    return View(ld); 
} 

В виде коде у меня есть:

public partial class Edit : ViewPage<MvcTest.Models.LocationViewData> 
{ 
} 

И мой вопрос: как я могу позволить свойство от Location модели в моем ViewData к отобразить в соответствующих текстовых окнах, например:

<%=Html.TextBox("address") %> 

Я делаю не хотят указывать каждое поле под его полным именем:

<%=Html.TextBox("address", ViewData.Model.location.address) %> 

ответ

1

Это уже работает именно так. Начните новый проект MVC (бета 1), и поместить его в "Index" действия "Home" контроллера:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     this.ViewData.Model = new MyObject 
     { 
      Name = "Timmy", 
      FavColor = "Blue", 
     }; 

     return View(); 
    } 

    public class MyObject 
    { 
     public string Name { get; set; } 

     public string FavColor { get; set; } 
    } 
} 

Теперь, поместите это в представлении:

<%=Html.TextBox("FavColor") %> 

It» Скажу «Синий» в нем. Он пытается связать по имени уже (MVC проверяет несколько мест, одна из которых - «Модель»).

EDIT: Что вам нужно сделать, это:

  1. Убедитесь, что «место» является собственностью, а «адрес» является собственностью.

  2. положить «location.address» как имя ... не просто «адрес».

+0

о вашем 2-м способе, он будет указывать имя текстового поля location.address, а при отправке на контроллер он не может отобразиться в «параметр строкового адреса» метода контроллера – complez 2008-11-28 16:07:28

Смежные вопросы