ASP .Net MVC 3 - формы, массовое редактирование, строго типизированное представление и проверки - PullRequest
2 голосов
/ 13 февраля 2012

Я использую IQueryable<Book> как модель для моего CheckIn вида.

Мне интересно, чтобы пользователь мог одновременно регистрировать несколько книг. Это причина, почему я использую IQueryable для модели.

Пожалуйста, исправьте меня, если я ошибаюсь, но насколько я знаю для этого сценария, @Html.EditorFor создаст более одного элемента с одинаковым идентификатором элемента. Не так ли?

Как лучше всего создать форму редактора для всех книг в запрашиваемой коллекции и убедиться, что проверки на стороне клиента продолжат работать?

1 Ответ

2 голосов
/ 14 февраля 2012

Пожалуйста, исправьте меня, если я ошибаюсь, но насколько я знаю для этого сценария, @ Html.EditorFor создаст более одного элемента с одинаковым идентификатором элемента.Не так ли?

Эмм, нет.

Модель:

public class Book
{
    public int Id { get; set; }
    public bool Selected { get; set; }
}

Контроллер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new[]
        {
            new Book { Id = 1, Selected = false },
            new Book { Id = 2, Selected = true },
            new Book { Id = 3, Selected = false },
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(IEnumerable<Book> model)
    {
        return View(model);
    }
}

Вид:

@model IEnumerable<Book>
@using (Html.BeginForm())
{
    <table>
        <thead>
            <tr>
                <th>Id</th>
                <th>Selected</th>
            </tr>
        </thead>
        <tbody>
            @Html.EditorForModel()
        </tbody>
    </table>
    <button type="submit">OK</button>
}

Шаблон редактора (~/Views/Shared/EditorTemplates/Book.cshtml):

@model Book
<tr>
    <td>@Html.EditorFor(x => x.Id)</td>
    <td>@Html.CheckBoxFor(x => x.Selected)</td>
</tr>

Сгенерированная разметка:

<form action="/" method="post">    
    <table>
        <thead>
            <tr>
                <th>Id</th>
                <th>Selected</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>
                    <input class="text-box single-line" data-val="true" data-val-number="Le champ Id doit &amp;#234;tre un nombre." data-val-required="The Id field is required." name="[0].Id" type="text" value="1" />
                </td>
                <td>
                    <input data-val="true" data-val-required="The Selected field is required." name="[0].Selected" type="checkbox" value="true" />
                    <input name="[0].Selected" type="hidden" value="false" />
                </td>
            </tr>
            <tr>
                <td>
                    <input class="text-box single-line" data-val="true" data-val-number="Le champ Id doit &amp;#234;tre un nombre." data-val-required="The Id field is required." name="[1].Id" type="text" value="2" />
                </td>
                <td>
                    <input checked="checked" data-val="true" data-val-required="The Selected field is required." name="[1].Selected" type="checkbox" value="true" />
                    <input name="[1].Selected" type="hidden" value="false" />
                </td>
            </tr>
            <tr>
                <td>
                    <input class="text-box single-line" data-val="true" data-val-number="Le champ Id doit &amp;#234;tre un nombre." data-val-required="The Id field is required." name="[2].Id" type="text" value="3" />
                </td>
                <td>
                    <input data-val="true" data-val-required="The Selected field is required." name="[2].Selected" type="checkbox" value="true" />
                    <input name="[2].Selected" type="hidden" value="false" />
                </td>
            </tr>
        </tbody>
    </table>

    <button type="submit">OK</button>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...