2010-07-15 68 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。