Можно ли моделировать привязку к опубликованным сломанным индексированным массивам?C# MVC привязка модели к индексированному массиву на пост
<input type='text' name='question[3]' value='answer to question 3' />
<input type='text' name='question[5]' value='whatever here' />
<input type='text' name='question[18]' value='a different ansewr' />
<input type='text' name='multiquestions[4][1]' value='question 4 part 1' />
<input type='text' name='multiquestions[4][2]' value='question 4 part 2' />
В идеале, я хотел бы, чтобы моя модель была вдоль линий (хотя печатаю это я могу видеть, что редкие ключи массива будет вопрос):
public class MyModel {
public Dictionary<int,string> questions {get;set;}
public Dictionary<int, Dictionary<int, string>> multiquestions {get;set;}
}
и пусть модель MVC связующее делать тяжелые:
public ActionResult MyAction(MyModel model) {...}
, но это, кажется, только дружит с ненарушенными индексами. Мне нужны индексы, так как я буду помещать данные в базу данных.
Я бы предпочел не иметь ряд скрытых полей, описывающих модели, например.
Я прочел Hanselman blog post по теме, в которой предлагается написать настраиваемое связующее устройство, если ничего не работает, но не знаете, с чего начать писать пользовательское связующее, и я надеюсь, что есть что-то, что MVC может сделать «из коробки», или что somoene решил эту проблему
AFAIK вам необходимо передать либо ViewBag, либо ViewData содержит максимальное количество индексов массива для применения на входе вида, итерацию через 1 или 2 цикла, предоставляя либо многоклинали [i] [j], либо вопросы [i] для печати ввода текста с помощью индексированный атрибут имени. Модель должна иметь переменную массива с таким же размером, чтобы включить привязку модели. –
Не используйте словарь. Ваше свойство модели должно быть 'public IEnumerable question {get; задавать; } 'для привязки к' name = 'question [3]' 'и т. д. И для обработки ненулевых/непересекающихся индексаторов см. [этот блог] (http://haacked.com/archive/2008/10/23/ model-binding-to-list.aspx /), но вам не нужны индексы. Просто используйте 'name = 'question' для всех из них, и он будет связывать штраф –
. Обратите внимание, что тег модели-представления-контроллера предназначен для вопросов о шаблоне. Существует определенный тег для реализации ASP.NET-MVC. –