【问题标题】:Can I force asp to set name the same as id我可以强制asp设置名称与id相同吗
【发布时间】:2011-10-26 00:27:57
【问题描述】:

我需要处理一个包含各种不同搜索控件的表单,但是这些搜索控件现在位于母版页内,因此 id 正在添加额外的垃圾('ct100$Body$TextBox_Postal' 而不是' TextBox_Postal')。

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

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

【问题讨论】:

  • 您是如何处理控件的?你能发布一些服务器端代码吗?此外,如果您知道 id,为什么不直接使用它们呢?
  • 控件在页面加载时动态添加到表单中,处理表单只是查看request.Form,其中包含所有搜索控件名称及其值的namevaluecollection。
  • 发布一段代码 sn-p,说明您是如何找到控件的。

标签: asp.net-4.0


【解决方案1】:

我认为没有办法适当地设置控件的名称,但如果您愿意,您也可以使用 JQuery 轻松更改它们的名称。

Example here

一些解释:

  • 假设你有这样的标记:

    <div>
        <asp:textbox runat="server"  id="staticid1" />
        <asp:textbox runat="server"  id="staticid2" />
        <asp:textbox runat="server"  id="staticid3" />
    </div>
    

您可以在window.load 上执行类似这样的操作,自动将所有这些控件名称更改为与其 ID 相同的名称:

 $.each($('div').children(), function() {
      $(this).attr("name",$(this).attr("id"));
   });

为了完成这项工作,您只需要包含 JQuery;你可以使用谷歌的 CDN: http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js

【讨论】:

  • 执行此操作后,文本框值在代码隐藏中不可读。我得到空字符串。我假设 .net 使用回发的名称?
  • @DanLehmann 这是正确的。但它不是 .NET 做的,这就是 HTML 的工作方式。如果您使用此技术,则必须使用 Rquest.Params["new_text_field_name"] 读取值,而不是读取 Text Propery。
【解决方案2】:

简短的回答是否定的,您将不得不覆盖 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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多