C# 使用转发器时,将ID作为输入标记上的第一个属性

C# 使用转发器时,将ID作为输入标记上的第一个属性,c#,html,asp.net,repeater,C#,Html,Asp.net,Repeater,我使用的是asp:repeater,但是有一种跟踪技术,它需要将第一个属性作为id,这样它就可以进行逐点比较 问题是,repeater呈现控件时,名称是第一个属性,然后是输入的类型,id是第三个属性,我需要找到一种方法首先创建它 有没有人在这样的问题上挣扎过 <input name="repeater$ctl00$txtField" type="text" id="repeater_ctl00_txtField" class="gray" /> 谢谢。我想不太优雅,但使用javas

我使用的是asp:repeater,但是有一种跟踪技术,它需要将第一个属性作为id,这样它就可以进行逐点比较

问题是,repeater呈现控件时,名称是第一个属性,然后是输入的类型,id是第三个属性,我需要找到一种方法首先创建它

有没有人在这样的问题上挣扎过

<input name="repeater$ctl00$txtField" type="text" id="repeater_ctl00_txtField" class="gray" />

谢谢。

我想不太优雅,但使用javascript

...get the elements somehow

    for (var j = 0; j < elements.length; j++) {
    var attributes = [];
    var attrId = '';
    var i;
    for (i = 0; i < elements[j].attributes.length; i++) {
        if (elements[j].attributes[i].name == 'id')
            attrId = elements[j].attributes[i].value;
        else
            attributes.push({
                'name': elements[j].attributes[i].name,
                'value': elements[j].attributes[i].value
            });
    }
    //Remove all attributes
    for (i = 0; i < attributes.length; i++) {
        elements[j].attributes.removeNamedItem(attributes[i]['name']);
    }
    //Add the id
    elements[j].setAttribute('id', attrId);
    //Add the rest
    for (i = 0; i < attributes.length; i++) {
        elements[j].setAttribute(attributes[i]['name'], attributes[i]['value']);
    }
}

顺便说一句:Attr order不重要,跟踪技术应该意识到这一点

非常感谢这个Felipe,它肯定为我指明了正确的方向

我确实遇到了一些问题,在type属性上执行element.removeAttr导致它失败,没有错误消息,所以我继续使用它,并发现

elements[j].attributes.removeNamedItem(attributes[i]['name']);
如果能够正确删除此属性,尝试添加类型属性也会以同样的方式失败,同样仅针对类型属性,因此我必须使用此方法添加:

elements[j].setAttribute(attributes[i]['name'], attributes[i]['value']);
最后你的逻辑解决了我的问题,我只是稍微调整了一下方法。这就是我的结局:

for (var j = 0; j < elements.length; j++) {
    var attributes = [];
    var attrId = '';
    var i;
    for (i = 0; i < elements[j].attributes.length; i++) {
        if (elements[j].attributes[i].name == 'id')
            attrId = elements[j].attributes[i].value;
        else
            attributes.push({
                'name': elements[j].attributes[i].name,
                'value': elements[j].attributes[i].value
            });
    }
    //Remove all attributes
    for (i = 0; i < attributes.length; i++) {
        elements[j].attributes.removeNamedItem(attributes[i]['name']);
    }
    //Add the id
    elements[j].setAttribute('id', attrId);
    //Add the rest
    for (i = 0; i < attributes.length; i++) {
        elements[j].setAttribute(attributes[i]['name'], attributes[i]['value']);
    }
}

再次感谢Felipe:

如果您需要特定的属性顺序,请考虑使用自定义控件并接管渲染。哇。这种跟踪技术是什么?要求属性按特定顺序排列是非常愚蠢的要求。非常感谢,它为我指明了正确的方向。不客气,我会更新我的答案,以防其他人需要它