asp.net mvc jquery $.post список

#c# #jquery #asp.net-mvc

#c# #jquery #asp.net-mvc

Вопрос:

я использую следующий тип записи:

 <% using (Html.BeginForm())
   { %>

<%= Html.Hidden("EligiblePages", Model.EligiblePages) %>

.... no elements in list appear

    $('.btnAction').click(function() {
            $.post("Home/AddProduct", $('form').serialize(), function(retval) { $('#addProductDialog').html(retval); });
    });


public class ProductViewModel
{
    public List<string> EligibleProducts { get; set; }
}


    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult AddProduct(string sender, ProductViewModel model)
    {
       ...
    }
  

я обновлю это, когда вернусь домой, и смогу собрать более точный пример.

и в моей модели просмотра, которая публикуется, у меня есть a list<string> в качестве скрытого поля ввода. по какой-то причине, когда происходит сообщение, и я проверяю метод post контроллера, это поле не отображается правильно. есть идеи?

Комментарии:

1. Пожалуйста, укажите код для остальной части представления и контроллера. Не видя скрытых значений и кода контроллера / viewmodel, мы не можем точно сказать вам, что происходит.

2. как форма представлена в вашем представлении

3. Спасибо всем за понимание!

Ответ №1:

 <%
for(int i=0;i<Model.EligiblePages.Count;i  )
    Html.HiddenFor(model=>model.EligiblePages[i]);
%>
  

Это приведет к отображению скрытых входных элементов и будет соответствующим образом реализовано в вашей модели, когда затем будет вызвана функция контроллера addProduct .

Ответ №2:

Основываясь на вашей модели представления, я бы ожидал, что ваши элементы формы будут выглядеть следующим образом:

 <input type="hidden" name="EligibleProducts[0]" value="whatever" />
<input type="hidden" name="EligibleProducts[1]" value="whatever" />
  

и т.д.

Это то, что ожидает связующее по умолчанию.

Ответ №3:

Ожидается DefaultModelBinder , что один или несколько элементов формы будут опубликованы для привязки к List<string> где имя каждого элемента формы совпадает с именем свойства списка в ViewModel . Фил Хаак написал хороший пост в блоге о различных подходах к привязке коллекций.

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

Что, по вашему мнению, публикуется для коллекции, если вы используете прокси-сервер для отладки HTTP, такой как fiddler?