#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?