Asp.net MVC2 - привязка формы сообщения - PullRequest
2 голосов
/ 17 февраля 2011

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

У меня есть класс SearchModel, который мое представление наследует от

 public class SearchModel
    {
        public String Something { get; set; }
        public List<SearchField> SearchFields { get; set; }
    }

public class SearchField
{
    [XmlIgnore]
    public Boolean Include { get; set; }

    [XmlAttribute("Required")]
    public Boolean Required { get; set; }

    [XmlAttribute("Field")]
    public String FieldName { get; set; }

    [XmlText]
    public String DisplayName { get; set; }

    [XmlIgnore]
    public FilterMethod FilterOperator { get; set; }

    [XmlIgnore]
    public String Value { get; set; }
}

У меня есть контроллер с именем SearchController

 public ActionResult Index()
        {
            SearchModel model = new SearchModel
                                    {
                                        Something = "Hello",
                                        SearchFields = customer.Config.Fields
                                    };

            return View(model);
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Index(SearchModel searchModel)
        {            
            return View("Index", searchModel);
        }

Страница индекса SearchController содержит это для отображения полей

<% using (Html.BeginForm())
   {%>
<%= Html.TextBox("Something", Model.Something) %>
<% for (int i = 0; i < Model.SearchFields.Count; i++)
   {

%>              
<%= Html.Label(Model.SearchFields[i].DisplayName) %>
<%= Html.DropDownListFor(x => x.SearchFields[i].FilterOperator, Model.SearchFields[i].FilterOperator.ToSelectList(), new { @class = "textField" })%>
<%= Html.TextBoxFor(x => x.SearchFields[i].Value) %>

<%= Html.ValidationMessageFor(x => x.SearchFields[i].Value) %>

<% } %>
<button type="submit" value="Search" class="SearchBtn">
    Search</button>
<% } %>

Когда я изменяю значение свойства SearchField .Value и нажимаю кнопку отправки, он отправляет сообщение в метод public ActionResult Index(SearchModel searchModel).

Переменная searchModel содержит коллекцию SearchFields, однако только свойства "Value" и "FilterOperator" не равны нулю.

Как я могу включить другие свойства в сообщение, даже если я не хочу явно перечислять их в форме?

На этом изображении ниже показаны значения, отправляемые на страницу отображения "index" enter image description here

Это изображение ниже показывает вывод из POST Output From POST

Ответы [ 3 ]

3 голосов
/ 17 февраля 2011

Если вы хотите, чтобы эти значения были переназначены, вам нужно либо предоставить их в представлении, используя поля как скрытые поля

Html.HiddenFor(m => m.searchFields[i].FilterOperator)

Или есть какая-то фабрика, которая заполняет вашу модель значениями по умолчанию

1 голос
/ 17 февраля 2011

Как я могу включить другие свойства в посте, даже если я не хочу явно перечислить их в виде?

Вам нужно будет снова получить их или заполнить скрытым полем и, в основном, позволить пользователю определять ваши данные только для чтения.

Вот почему мне нравится сохранять PostModel как свойство ViewModel. Тогда моему методу пост-действия нужен только параметр PostModel. В противном случае, как и в вашем примере, вы получите обратно этот гибрид ViewModel / PostModel и вам нужно выяснить, какие свойства использовать.

1 голос
/ 17 февраля 2011
...