我有一个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控件,它的工作正常。
原文地址:https://www.jb51.cc/aspnet/252270.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。