asp.net 4.0:是否有任何相当于ClientIDMode的名称的INPUT?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我有一个asp:ListView其ClientIDMode设置为可预测的。它的ItemTemplate包含一个asp:textbox

文本框的ID正如我所期望的那样工作,但它name仍在使用类似于AutoID风格的算法:

<input name="lvFields$ctrl0$tbVal" id="lvFields_tbVal_somekey" type="text"/>

有没有办法让我的输入名称像ID一样行事?

Name输入元件的是什么在POST数据,因此,如果回传改变该列表,其中的ListView绑定到(例如,交换两个元件)从文本框的值结束与错误的键相关联,因为框架是将它们关联起来Name而不是根据ID

提问于
用户回答回答于

我很肯定你不能改变名字,特别是当你修改ClientIDMode的时候。作为替代方案,可以添加标题属性。VS将在服务器端代码中将其标记为未知,但它在HTML中正确呈现。如果你正在做一些客户端操作,你可以像这样处理输入:

<script type="text/javascript">
$(document).ready(function () {
$('input:text[title="TextBoxName"]').datepicker();
});
</script>
用户回答回答于

我在控件RenderChildren上重载了方法,Page因为我只是想完全控制一些控件的HTML:

protected override void RenderChildren(HtmlTextWriter writer)
{
    var unScrewNamesRender = new RenderBasicNameHtmlTextWriter(writer);
    base.RenderChildren(unScrewNamesRender);
}

private class RenderBasicNameHtmlTextWriter : HtmlTextWriter
{
    public RenderBasicNameHtmlTextWriter(TextWriter writer) : base(writer) { }

    public override void AddAttribute(HtmlTextWriterAttribute key, string value)
    {
        if (key == HtmlTextWriterAttribute.Name && value.Contains("POLine"))
        {
            value = value.Substring(value.LastIndexOf("$") + 1);
        }

        base.AddAttribute(key, value);
    }
}

如果你尝试这样做,你确实需要知道你在做什么,WebForms会认为控件丢失了,所以你不能在任何回发中使用它。对于我而言,我希望在服务器端或客户端添加任意数量的多行,而无需处理.Net Ajax控件,它可以正常工作。

扫码关注云+社区