我有一个ASP.NET MVC3 Razor视图,它为jQuery UI手风琴内的客户列表呈现编辑器。此刻,所有客户端ID对于相似客户属性在呈现的HTML中都是相同的。出于显而易见的原因,我想改变这一点。当在项目列表上重复生成时,在ASP.NET MVC3中生成不同的客户端ID
我的主要观点如下:
<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
不是唯一的ID。
有什么办法告诉告诉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);
}
不,不要在视图中使用任何循环。 – 2011-04-14 13:17:21
为什么不呢?自从mvc2以来我就这样做了。 – 2011-04-14 13:18:56
因为自ASP.NET 2.0以来有编辑器/显示模板。查看我的答案了解更多详情。所以循环只在ASP.NET MVC 1.0中需要。从那时起,视图可以更清洁。 – 2011-04-14 13:19:58