У меня есть представление ASP.NET MVC3 Razor, которое отображает редакторы для списка клиентов в аккордеоне jQuery UI. На данный момент все идентификаторы на стороне клиента для похожих свойств клиентов одинаковы в отображаемом html. По понятным причинам я хотел бы изменить это.
Мой основной вид выглядит следующим образом:
<div id="accordionKlanten">
@foreach (var customer in Model.Customers)
{
<h3><a href="#">@customer.Name</a></h3>
<div>@{ Html.RenderPartial("CustomerData", customer); }</div>
}
</div>
И в моем CustomerData
представлении (значительно упрощенном):
@using (Ajax.BeginForm("UpdateCustomer", ajaxOptions))
{
@Html.LabelFor(model => model.Name)
@Html.TextBoxFor(model => model.Name)
<input type="submit" value="Opslaan" />
}
Все это прекрасно работает: я могу публиковать в своем методе действия UpdateCustomer
, объект модели привязывается и возвращается частичное представление, которое отображается клиенту.
Но когда у меня три клиента, это отображает три поля ввода в моем html с id="Name"
. Одна из вещей, которая идет не так, это то, что <label for="Name">...</label>
не работает, поскольку Name
не является уникальным идентификатором.
Есть ли способ сказать велению ASP.NET MVC3 визуализировать различные id
(при этом атрибуты name
не затрагиваются, так как они используются для привязки к модели)?
Для полноты картины используются два метода действия:
// Returns view that renders editor for each customer.
public ActionResult Index()
{
var customers = _customerService.GetCustomers();
return View(new CustomersViewModel { Customers = customers });
}
// Updates a customer and returns a partial view.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UpdateCustomer(CustomerDto customer)
{
// Update customer in database.
return PartialView("CustomerData", customer);
}