【问题标题】:how to avoid duplicated dynamic id on partialViews elements如何避免部分视图元素上的重复动态 id
【发布时间】:2013-06-05 14:05:22
【问题描述】:
我有一个项目,我在克里特岛 jquery 选项卡并使用 Ajax 加载它们的局部视图(全部动态完成),有一些共享的局部视图,如“selectUser”,问题是某些选项卡将在同时,所以我会重复 ids,然后我说“没有概率”会使用类和更具体的选择器,但我无法使用类选择器让 jqgrid 工作。
所以我正在寻找一个不错的方法来:
-创建动态ID
或者
-使用类使 jqgrid 工作
【问题讨论】:
标签:
asp.net-mvc-4
jqgrid
partial-views
【解决方案1】:
Add a prefix to each different item
public static void RenderPartialWithPrefix(this HtmlHelper helper, string partialViewName, object model, string prefix)
{
helper.RenderPartial(partialViewName,
model,
new ViewDataDictionary { TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = prefix } });
}
【解决方案2】:
我不确定我是否理解正确。如果您使用 jqGrid,您需要在网格上有 <table> 元素,并带有 一些唯一的 id 属性。如果您动态生成<table> 元素,您可以先生成唯一ID,然后使用id 属性创建<table> 元素。方法$.jgrid.randId()可以帮到你。使用非常简单。您可以在the answer 中找到代码示例。
存在另一个问题,因为必须为网格的每一行分配唯一的id 属性。如果您在没有为输入数据中的行指定任何 id 的情况下填充网格,或者如果网格的本机 id 可能具有 common 值(不同网格中的相同 rowid),则您可以有 id 重复在数据中。您可以通过使用idPrefix 选项来解决问题。如果您在页面上的所有网格中指定idPrefix 选项的不同 值(例如,idPrefix: "g1_" 用于第一个网格,idPrefix: "g2_" 用于第二个网格,依此类推)将构造 rowid来自id 和idPrefix。因此,您将有唯一的 rowid。
【解决方案3】:
@Html.Partial("_Address",
new ViewDataDictionary()
{
TemplateInfo = new TemplateInfo() { HtmlFieldPrefix = "ShippingAddress" }
})
上面使用的 Partial() 助手的变体使用 ViewDataDictionary 参数来指定 TemplateInfo。 TemplateInfo 的 HtmlFieldPrefix 属性必须设置为您选择的名称。
结果:
<input id="ShippingAddress_Street" name="ShippingAddress.Street" type="text" value="" />