Я предполагаю, что DropDownListFor
ничего не делает с элементом при рендеринге страницы, он ждет, пока страница не будет отправлена обратно (например, он не оценивает ее, поэтому нет индекса вне диапазона исключений).TextBoxFor пытается получить значение и поместить его на страницу, поэтому ему нужно оценить m=>ViewModel.Books[i].forTextBox
при визуализации страницы.
Редактировать: Хорошо, я немного прочел материал Фила.Его подход довольно сложен, и, не видя вашего взгляда во всей его полноте, становится все труднее выяснить, где вы разошлись.
В конечном счете, однако, я предполагаю, что мой ответ все еще остается в силе.
Я немного смущен этой нотацией, однако:
m => ViewModel.Books[i].forTextBox
Я не видел подобной лямбда-нотации раньше.Это действительно так в вашем коде, или что-то теряется, когда вы набираете это в StackO?
Я бы ожидал чего-то более похожего на:
m => m[i].forTextbox
или, может быть, даже:
m => m.Books[i].forTextBox
, но, не зная, от чего унаследовано ваше мнение, я немного растерялся.