微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net-4.0 – 我可以强制asp设置与id相同的名称

我需要处理一个充满各种不同搜索控件的表单,但是这些搜索控件现在位于母版页内,因此id中添加了额外的垃圾(‘ct100 $Body $TextBox_Postal’而不是’TextBox_Postal’) .

我能够通过设置ClientIDMode = CliendIDMode.Static来解决这个问题,这很好用,因为它不会尝试在id中包含命名容器.我相信页面上永远不会有两个相同的控件,所以这会起作用.

问题是,当回发表单时,控件将按名称处理.名称仍然是’ct1200 $Body $..’格式,因此processform函数无法找到任何控件.有没有办法让ASP在“静态”模式下设置名称

解决方法

简短的回答是否定的,您必须覆盖name属性的呈现,例如下面的问题: ASP.NET: how to remove ‘name’ attribute from server controls?
public class NoNamesTextBox : TextBox
{
    private class NoNamesHtmlTextWriter : HtmlTextWriter
    {
        public NoNamesHtmlTextWriter(TextWriter writer) : base(writer) {}

        public override void WriteAttribute(string name,string value,bool fEncode)
        {
            if (name.Equals("name",StringComparison.OrdinalIgnoreCase)) return;

            base.WriteAttribute(name,value,fEncode);
        }
    }

    protected override void Render(HtmlTextWriter writer)
    {
        var noNamesWriter = new NoNamesHtmlTextWriter(writer);

        base.Render(noNamesWriter);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐