Получение опубликованных значений в MVC PartialView - PullRequest
2 голосов
/ 12 ноября 2009

Я создал PartialView, который я отображаю с помощью Html.RenderPartial, передавая имя представления и строго типизированный элемент данных для привязки (ниже):

    <% Html.RenderPartial("SearchViewUserControl", ViewData["SearchData"]); %>

Частичное представление имеет форму, содержащую кнопку отправки:

<% using (Html.BeginForm("Search", "Home"))
   { %>
             ...
    <div>
        <input type="submit" value="Search" />
    </div>
<% } %>

Я установил точку останова в методе действия моего контроллера (ниже), но ничего не установлено в searchData. Что я делаю не так?

   public ActionResult Search(SearchDomain searchData)
    {
        if (ModelState.IsValid)
        {
        }

        return View();
    }

Ответы [ 3 ]

0 голосов
/ 12 ноября 2009

Чтобы вытащить объект SearchDomain из вашего представления из метода контроллера, ваше представление должно наследоваться от System.Web.Mvc.ViewPage<Models.SearchDomain>, или пользовательского класса ViewModel , который содержит объект SearchDomain.

Другой способ сделать это - наследовать представление от System.Web.Mvc.ViewPage и использовать UpdateModel для приведения данных представления к объекту SearchDomain. Примерно так:

public ActionResult Save()
{
        SearchDomain domain = new SearchDomain ();

        UpdateModel(domain , new[] { "Name", "Email", "Phone", ... });
        return View(domain); 
}
0 голосов
/ 12 ноября 2009

Если честно, я думаю RenderAction гораздо проще в использовании.

0 голосов
/ 12 ноября 2009

Вам нужно опубликовать фактические элементы формы, чтобы кто-нибудь знал, что случилось.

Форма html - это то, что устанавливает привязку к SearchDomain. Вы хотите, чтобы ваши элементы формы назывались так:

<input name="searchData.SomeProperty">

Чтобы они связались с вашим параметром действия.

...