EditorFor с атрибутом Коллекции и Имя - PullRequest
0 голосов
/ 01 марта 2011

Я пытаюсь создать форму, которая позволяет редактировать несколько строк данных.У меня нет проблем с циклическим просмотром и получением полей ввода для рендеринга ... Я просто не могу заставить атрибуты имени выводить правильно.

Я знаю, что для отправки коллекции вам нужно отправить обратно индексированное имя, гдеИндекс является последовательным, начиная с 0.

<input name="Books[0].Title" />
<input name="Books[1].Title" />
and so on...

Теперь я могу заставить функцию EditorFor вывести свое собственное имя, используя следующий код цикла

@For n = 0 To (Model.Books.Count - 1)
    @Html.EditorFor(Function(m) Model.Books.Item(n).Title)
Next

, давая мне

<input name="Books[0].Title" />
<input name="Books[1].Title" />
and so on...

Моя проблема заключается в том, что VS показывает следующее предупреждение

Использование переменной итерации в лямбда-выражении может привести к неожиданным результатам.Вместо этого создайте локальную переменную внутри цикла и присвойте ей значение переменной итерации.

Тем не менее, когда я изменяю цикл на

@For n = 0 To (Model.Books.Count - 1)
    Dim item = Mode.Books.Item(n)

    @Html.EditorFor(Function(m) item.Title)
Next

, я получаю

<input name="$VB$Local_item.Title" />
<input name="$VB$Local_item.Title" />
and so on...

Есть мысли?Должен ли я просто игнорировать предупреждение?

Спасибо.

  • Джейсон

1 Ответ

0 голосов
/ 25 марта 2011

MVC работает, фактически разбивая лямбда-выражение и видя, из чего оно состоит.Он не просто выполняет лямбду и получает результат.Таким образом, вам нужно использовать параметр модели в лямбде, чтобы он работал.Это должно сделать это для вас:

@For n = 0 To (Model.Books.Count - 1)
    Dim index = n

    @Html.EditorFor(Function(m) m(index).Title)
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...