如何避免部分视图元素上的重复动态ID

时间:2013-06-05 14:05:23

标签: asp.net-mvc-4 jqgrid partial-views

我有一个项目,其中我克里特jquery选项卡并使用Ajax加载它们的部分视图(所有动态完成),有一些共享的部分视图,如“selectUser”,问题是一些选项卡将使用此部分视图在同时,所以我将重复ids,然后我说“没有概率”使用类和更具体的选择器,但我不能让jqgrid使用类选择器工作。

所以我正在寻找一个很好的方法:      - 创建动态ID 要么     -make jqgrid使用类

工作

3 个答案:

答案 0 :(得分:0)

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 } });
        }

答案 1 :(得分:0)

我不确定我是否理解正确。如果您使用jqGrid,则需要在网格上添加<table>元素,并使用一些唯一ID属性。如果您动态生成<table>元素,则可以先生成唯一ID,然后使用id属性创建<table>元素。方法$.jgrid.randId()可以帮助您。用法非常简单。您可以在the answer中找到代码示例。

存在另一个问题,因为一个必须为网格的每一行分配唯一的id属性。如果填充网格时没有为输入数据中的行指定任何id,或者网格的原生ID可能具有公共值(不同网格中的相同rowid),则可以id在数据中重复。您可以使用idPrefix选项解决问题。如果您在页面上的所有网格中指定{em>不同的值idPrefix选项(例如,idPrefix: "g1_"用于第一个网格,idPrefix: "g2_"用于第二个网格,依此类推)rowid将由ididPrefix构成。因此,你将拥有独特的rowid。

答案 2 :(得分:0)

@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="" />