Asp.net-4.0
我可以強制asp設置名稱與id相同嗎
我需要處理一個充滿各種不同搜尋控制項的表單,但是這些搜尋控制項現在位於母版頁內,因此 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