2016-07-01 2 views
2

Можно ли моделировать привязку к опубликованным сломанным индексированным массивам?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 решил эту проблему

+0

AFAIK вам необходимо передать либо ViewBag, либо ViewData содержит максимальное количество индексов массива для применения на входе вида, итерацию через 1 или 2 цикла, предоставляя либо многоклинали [i] [j], либо вопросы [i] для печати ввода текста с помощью индексированный атрибут имени. Модель должна иметь переменную массива с таким же размером, чтобы включить привязку модели. –

+0

Не используйте словарь. Ваше свойство модели должно быть 'public IEnumerable question {get; задавать; } 'для привязки к' name = 'question [3]' 'и т. д. И для обработки ненулевых/непересекающихся индексаторов см. [этот блог] (http://haacked.com/archive/2008/10/23/ model-binding-to-list.aspx /), но вам не нужны индексы. Просто используйте 'name = 'question' для всех из них, и он будет связывать штраф –

+0

. Обратите внимание, что тег модели-представления-контроллера предназначен для вопросов о шаблоне. Существует определенный тег для реализации ASP.NET-MVC. –

ответ

0

После немного больше поисков, то получается, что не используется int, поскольку ключ словаря - это трюк.

привязка к модели будет работать так, как я ожидаю, используя Dictionary<string, string> и Dictionary<string, Dictionary<string, string>>, и мне нужно разобрать ключ на int, когда я нахожусь на сервере.

-2

может быть, вы могли бы проверить для подсчета или нуль перед обращением значение

Смежные вопросы