2015-02-26 2 views
0

У меня есть шаблон EditorFor, который я вызываю с массивом элементов (может быть несколько), и я ссылаюсь на индексы отдельно (не в цикле), поэтому я могу выложить их определенным образомMVC Использование пользовательского индексатора с EditorFor

@ Html.EditorFor (х => Model.SomeViewModels [0], "SomeTemplate")

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

@ Html.EditorFor (x => M odel.SomeViewModels [ «Пункт Найти»], «SomeTemplate»)

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

public ObjecToReturn this[string TextToFind] 
    { 
     get 
     { 
          return ObjectToReturn based on TextToFind 
     } 
    } 

и делает работу - и тянет значение через правильно, однако, когда я смотрю на Html поля ввода всех есть имена, как name=[Item to Find].AnswerValue, которые я могу видеть, почему, но это портит пост обратно

Просто задавался вопросом, был ли какой-нибудь умный человек работал, как я могу отправить в Model.SomeViewModels["Item to Find"] к EditorFor пока основной Html в шаблон отражает Model.SomeViewModels[0] (0 является индекс «Пункт, чтобы найти» в массиве), так что Postback работает

Или, может быть, это неправильный подход -Я надеюсь, что я пропущу что-то прямое.

Заранее спасибо

ответ

1

По умолчанию DefaultModelBinder связывает коллекцию, где индексаторы начинаются с нулем и являются последовательными. Вы можете сделать эту работу, добавив скрытый ввод для свойства Index (примечание Index не является собственностью вашей модели - это просто специальное значение, используемое для привязки коллекций). Например

<input type="text" name="SomeViewModels[ABC]" value = "" /> 
<input type="hidden" name="SomeViewModels.Index" value="ABC" /> 

<input type="text" name="SomeViewModels[XYZ]" value = "" /> 
<input type="hidden" name="SomeViewModels.Index" value="XYZ" /> 

Добавление скрытого ввода, где атрибут value соответствует значению индексатор позволяет DefaultModelBinder правильно связать коллекцию

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