Я довольно новичок в ASP MVC, так что, возможно, это просто, но я действительно застрял, потому что я искал форумы без удачи;)
Я подготовил простой пример своей проблемы. Вот что я пытаюсь сделать. У меня есть следующая модель, которую я передаю в представление:
public class SearchModel
{
public int ItemsFound { get; set; }
public int TotalItems { get; set; }
public SearchFacetModel SearchFacet { get; set; }
}
и вложенный класс
public class SearchFacetModel
{
public string SearchText { get; set; }
public DateTime DateFrom { get; set; }
public DateTime DateTo { get; set; }
}
Контроллер выглядит так
[HttpGet]
public ActionResult Index()
{
SearchModel model = new SearchModel { SearchFacet = new SearchFacetModel() { SearchText = "test", DateFrom = DateTime.Now }, ItemsFound=1, TotalItems=10 };
return View(model);
}
[HttpPost]
public ActionResult Index(SearchModel model) // Where is model.SearchFacet? Why null?
{
return View(model);
}
Вид:
<% using(Html.BeginForm()) { %>
Search<br />
<%=Html.TextBoxFor(m=>m.ItemsFound) %><br />
<%=Html.TextBoxFor(m=>m.TotalItems) %><br />
Search Facet<br />
<% Html.RenderPartial("SearchFacet", Model.SearchFacet); %>
<button type=submit>Submit</button>
<%} %>
Элемент управления SearchFacet:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcApplication3.Models.SearchFacetModel>" %>
<%=Html.TextBoxFor(m=>m.DateFrom) %>
<%=Html.TextBoxFor(m=>m.DateTo) %>
<%=Html.TextBoxFor(m=>m.SearchText) %>
Теперь я уже разместил комментарий рядом с методом Index с помощью HttpPost. Я получаю объект SearchModel, но у него нет дочернего объекта SearchFacet. Ребенок нулевой.
Когда я изменяю SearchFacet.ascx, чтобы он принимал всю SearchModel и передавал его из основного вида, тогда он работает. Но я не хочу передавать все вещи всегда и везде.
Я, конечно, упускаю что-то, связанное с Model Binder, но что и как заставить это работать у меня? :)
Любая помощь будет оценена.
Gacu