2010-07-15 66 views
8

在我的ASP.Net的網頁我有更改生成的ASP.Net <form> ID?

<form id="MasterPageForm" runat="server"> 

然而,每當生成的標記,它變成

<form name="aspnetForm" method="post" action="SomePage.aspx..." id="aspnetForm"> 

是否有可能設置表單生成的HTML ID是什麼?

回答

12

注意:由於您正在使用母版頁,因此您會看到「aspnetForm」。

我發現在這個線程解決方案...

http://forums.asp.net/p/883974/929349.aspx

總之,這就是答案是從該鏈接的內容:

下面是該錯誤的代碼負責:

public override string UniqueID 
{ 
     get 
     { 
      if (this.NamingContainer == this.Page) 
      { 
        return base.UniqueID; 
      } 
      return "aspnetForm"; 
     } 
} 

正如您所看到的,當命名容器與當前頁面不同(當您使用母版頁時發生的情況)時e UniqueID屬性返回「aspnetForm」。這個屬性被渲染成在form標籤中發送給客戶端的name屬性。所以,如果你真的需要,你可以通過從htmlform繼承來創建自己的表單,然後重寫UniqueID屬性或Name屬性(這可能是一個更好的選擇)。

一個例子定製HtmlForm控件類可能是這樣的:

public class Form : System.Web.UI.HtmlControls.HtmlForm 
{ 
    public Form() : base() { } 

    public override string UniqueID 
    { 
     get { 
      if (this.NamingContainer == this.Page) 
      { return base.UniqueID; } 

      return "f"; 
     } 
    } 
} 

注意:您當然可以從「F」改變形式的名稱到別的東西,或把它讀一動態值,從說一個web.config文件等等。

和像這樣

<%@Register tagprefix="LA" Namespace="Mynamespace"%> 
... 
<LA:form runat="server" id="frm"> 
... 
</LA:form> 
+5

在ASP.NET 4中,此行爲已更改。即使'

'控件位於命名容器中,它不再將其強制編碼爲「aspnetForm」。它現在實際上有正確的客戶端ID。我遇到了一個情況,我們有一個母版頁嵌套在另一個母版頁。嵌套的母版頁是''的定義,並且發生了完全相同的事情。 – Sumo 2012-07-11 12:20:49

4

設置在表單標籤的「的ClientIDMode」屬性「靜」,以防止框架從「aspnetForm」覆蓋它使用。這讓我堅持了幾個小時。

+1

對於那些不熟悉屬性的人(如我):應該在主頁面參數'<%@ Master ClientIDMode =「Static」'...中設置屬性。欲瞭解更多信息http://weblog.west-wind.com/posts/2009/Nov/07/ClientIDMode-in-ASPNET-40 – IvanH 2014-11-14 09:32:20

0

我同意@ Sumo在接受的答案下的評論,我也有同樣的情況。

在ASP.NET 4.0中,母版頁如果沒有給出一個id,則呈現的html將被自動分配一個,例如。

否則,呈現的html將具有其原始定義的id。