Я создал строго типизированный LocationViewData со свойствами вроде
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) %>





Это уже работает именно так. Запустите новый проект MVC (beta 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") %>
В нем будет написано "Синий". Он уже пытается выполнить привязку по имени (MVC проверяет несколько мест, одно из которых - «Модель»).
Обновлено: Что вам нужно сделать, это:
Убедитесь, что «местоположение» - это свойство, а «адрес» - это свойство.
укажите в качестве имени "location.address" ... а не просто "адрес".
о вашем 2-м способе, он установит имя текстового поля - location.address, и при отправке в контроллер он не может отображаться в «параметр строкового адреса» метода контроллера