Asp.net-4.0

我可以強制asp設置名稱與id相同嗎

  • September 25, 2012

我需要處理一個充滿各種不同搜尋控制項的表單,但是這些搜尋控制項現在位於母版頁內,因此 id 被添加了額外的垃圾(‘ct100 $ Body $ TextBox_Postal’ 而不是’TextBox_Postal’)。

我可以通過設置 ClientIDMode=CliendIDMode.Static 來解決這個問題,這很好用,因為它不會嘗試在 id 中包含命名容器。我相信頁面上永遠不會有兩個相同的控制項,所以這會起作用。

問題是,當表單被回發時,控制項是按名稱處理的。名稱仍然是 ‘ct1200 $ Body $ ..’ 格式,因此 processform 函式無法找到任何控制項。有沒有辦法讓 ASP 也將名稱設置為“靜態”模式?

簡短的回答是否定的,您將不得不覆蓋名稱屬性的呈現,下面這個問題的範例:ASP.NET:如何從伺服器控制項中刪除“名稱”屬性?

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);
   }
}

我不認為有一種方法可以適當地設置控制項的名稱,但是如果您願意的話,您也可以使用 JQuery 很容易地更改它們的名稱。

這裡的例子

一些解釋:

  • 假設你有這樣的標記:
<div>
   <asp:textbox runat="server"  id="staticid1" />
   <asp:textbox runat="server"  id="staticid2" />
   <asp:textbox runat="server"  id="staticid3" />
</div>

您可以自動將所有這些控制項名稱更改為與它們的 id 相同的名稱,在以下位置執行以下操作window.load

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

為了完成這項工作,您只需要包含 JQuery;你可以使用Google的 CDN: http ://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js

引用自:https://stackoverflow.com/questions/7897445