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

我有一个asp:ListView其ClientIDMode设置为Predictable。它的ItemTemplate包含一个asp:文本框。

文本框的ID是按照我期望的方式执行的,但它的名称仍然使用一种类似于AutoID风格的算法:

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

有没有办法使我的输入名称像ID这样做?

(回答下面的问题编辑:)

输入元素的名称是POST数据中的内容,因此如果回发更改ListView绑定到的列表(例如,交换两个元素),则文本框中的值最终会与错误的键相关联,因为框架根据Name而不是ID相关联。

解决方法

您可以使用以下文章中的方法更改输入的名称,但稍稍修改

ASP.NET: how to remove ‘name’ attribute from server controls?

我在一个页面控件上覆盖了RenderChildren方法,因为我只想完全控制一些控件的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控件,它的工作正常。

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....