.NET MVC - отправка нескольких моделей одного типа одновременно - PullRequest
4 голосов
/ 18 августа 2011

Я думаю, что у меня есть довольно простой сценарий, но я не могу понять, как это сделать в среде .NET MVC.В простейшем случае это форма, в которой есть люди с рейтингом.Я хотел бы, чтобы на каждой странице было имя каждого человека и текстовое поле рядом с его именем.Вот как выглядит (Razor) Html:

@using (Html.BeginForm()) {
<fieldset>
    @foreach (var b in Model.Ballots) {
        <p>
            <label>@b.Person.FullName</label>
            @Html.TextBox("Rank")
            @Html.ValidationMessage("Rank")
        </p>
    }
</fieldset>
 <input type="submit" value="Vote" />

}

Бюллетень - это простой объект с личностью и рейтингом:

public class Ballot {
    public Person Person { get; set; }
    [Range(1, 6, ErrorMessage="The voting range is 1 through 6")]
    public int Rank { get; set; }
}

Вотметод моего контроллера для обработки отправки формы, но он никогда не вызывается.

[AcceptVerbs("POST")]
    public ActionResult Vote(IEnumerable<Ballot> ballots) {

        return View("BallotComplete");
    }

Как выполнить итерацию всех моделей, которые форма отправляет обратно на сервер?

1 Ответ

7 голосов
/ 18 августа 2011

Я сделал быстрый пример, используя объект Customer, но я думаю, что он похож.Обратите внимание, как помечены поля формы.Префикс с именем параметра в действии в контроллере.Индекс необходимо рассматривать как коллекцию.Ваш может быть немного сложнее, потому что у вас есть вложенный класс.(Человек внутри бюллетеня).Я думаю, что при работе с клиентами [@counter] .Person.Id для полей формы все же будет работать.Извините, у меня не было примера с бюллетенями.:)

Это будет соответствующая часть представления:

@using (Html.BeginForm())
{
    var counter = 0;
    foreach (var customer in this.Model)
     {
         <input type="text" name="customers[@counter].Id" value="@customer.Id"/>
         <input type="text" name="customers[@counter].CompanyName" value="@customer.CompanyName"/>
         counter++;
     }
     <input type="submit" />
}

, и это будет соответствующая часть контроллера:

public ActionResult Test()
{
    return View(Service.GetCustomers());
}

[HttpPost]
public ActionResult Test(Customer[] customers )
{
    return View(customers);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...