mvc3 форма для IEnumerable - PullRequest
       5

mvc3 форма для IEnumerable

7 голосов
/ 22 сентября 2011

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

Моя ViewModel:

public class ApproveView
{

    public IEnumerable<MyObject> ObjectList { get; set; }

}

На мой взгляд, у меня есть:

foreach (var item in Model.ObjectList)
{
    <div>


    <table class="form" width="100%">
        <tr>

            <td>@Html.LabelFor(model => item.Accurate)<br />
            @Html.RadioButtonFor(model => item.Accurate, true) Yes
            @Html.RadioButtonFor(model => item.Accurate, false) No
            @Html.ValidationMessageFor(model => item.Accurate)
            </td>
            <td>
            @Html.LabelFor(model => item.Comments)<br />
            @Html.TextAreaFor(model => item.Comments)<br />
            @Html.ValidationMessageFor(model => item.Comments)
            </td>
        </tr>

    </table>

    @Html.HiddenFor(model => item.ID)
    @Html.HiddenFor(model => item.CreatedOn)
    @Html.HiddenFor(model => item.CreatedBy)
    @Html.HiddenFor(model => item.ModifiedOn)
    @Html.HiddenFor(model => item.ModifiedBy)
   <hr />
}

Это зацикливает мои объекты и печатает форму.Проблема в том, что все поля одного типа имеют одинаковые имена.Так, например, все мои переключатели подключены, и я могу выбрать только одну.

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

Ответы [ 2 ]

4 голосов
/ 22 сентября 2011

Проверьте это сообщение: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

Вам необходимо создать редактор для вашей сущности.

Надеюсь, это поможет.

0 голосов
/ 22 сентября 2011

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

    @{var count = 0;}
    @foreach (var item in Model.ObjectList){
            <div>
                <table class="form">
                    <tr>
                        <td>@Html.Label("Accurate" + count, item.Accurate)<br />
                            @Html.RadioButton("AccurateTrue" + count, true) Yes
                            @Html.RadioButton("AccurateFalse" + count, false) No
                            @Html.ValidationMessage("ValidationAccurate" + count, item.Accurate)
                        </td>
                        <td>
                            @Html.Label("CommentsLabel" + count, item.Comments)<br />
                            @Html.TextArea("Comments" + count, item.Comments)<br />
                            @Html.ValidationMessage("ValidationComment" + count, item.Comments)
                        </td>
                    </tr>
                </table>
                @Html.Hidden("ID" + count, item.ID)
                @Html.Hidden("CreatedOn" + count, item.CreatedOn)
                @Html.Hidden("CreatedBy" + count, item.CreatedBy)
                @Html.Hidden("ModifiedOn" + count, item.ModifiedOn)
                @Html.Hidden("ModifiedBy" + count, item.ModifiedBy)
                <hr />
                @count++; 
@}
...