.NET MVC3 Html.Hidden для цикла foreach, ожидающего коллекцию? - PullRequest
3 голосов
/ 22 июля 2011

Вот часть частичного:

@model IEnumerable<BLL.DomainModel.Jerk>

@foreach (var jerk in Model)
{
    using (Html.BeginForm("AddJerk", "Jerk", FormMethod.Post, new { @class = "jerkListForm" }))
    {
     @Html.HiddenFor(jerk => )
       @jerk.Name
       ...  
    }
}

Тип, который ищет HiddenFor лямбда, такой же, как @model (IEnumerable), тогда как я ищуодин объект в этом IEnumerable.

Что мне не хватает?Почему он все еще ищет коллекцию внутри цикла foreach?

Ответы [ 3 ]

12 голосов
/ 07 декабря 2011
@model IEnumerable<Type>

@foreach(var item in Model)
{

    @Html.HiddenFor(model => item)

}

Не забывайте, что Type должен быть де / сериализуемым, чтобы это работало.

6 голосов
/ 22 июля 2011

Все Html Для помощников, предоставляемых Asp.Net MVC, используйте модель определенной модели для страницы. Что вы можете сделать, это создать EditorTemplate. Создайте в вашей папке View подкаталог с именем EditorTemplates, например, в \Home\EditorTemplates\, добавьте новое представление с именем Jerk.cshtml и назначьте свою модель таким образом.

Тогда вы можете использовать Html.HiddenFor(f => f.Name) и так далее для каждого свойства. Это даст вам типизированный доступ, который вы ожидаете.

На главном экране вы должны сделать следующее:

@foreach(var jerk in Model) {
    @Html.EditorFor(m => jerk)
}

или вы можете позвонить EditorForModel, где он будет автоматически перебирать и искать шаблон EditorTemplate.

@Html.EditorForModel()

EditorFor сначала будет искать созданный вами шаблон EditorTelate, затем он будет идти оттуда до тех пор, пока не найдет переопределение или не выведет один MVC, который, возможно, вам понадобится.

4 голосов
/ 22 июля 2011

Я бы вместо этого использовал цикл for. Таким образом, ваше скрытое поле будет иметь правильное имя. Если вы используете хелперы, как в вашем примере, все скрытые поля будут иметь имя рывка, которое не будет отправлено обратно правильно.

@foreach (var i = 0; i < Model.Count; i++)
{
    var jerk = Model[i];
    using (Html.BeginForm("AddJerk", "Jerk", FormMethod.Post, new { @class = "jerkListForm" }))
    {
     @Html.HiddenFor(model => model[i])
       @jerk.Name
       ...  
    }
}

Если привязка не имеет значения для вас при обратной передаче, вы можете просто сделать

@Html.HiddenFor (jerk => jerk)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...