9

In my ASP.Net page I have

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

However, whenever the markup is generated, it turns into

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

Is it possible to set what the generated HTML id for the form is?

Earlz
  • 62,085
  • 98
  • 303
  • 499

4 Answers4

12

Note: you are seeing "aspnetForm" because you are using a master page.

I found your solution in this thread...

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

In short, this is what the answer is from that link:

Here's the responsible code for that error:

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

As you can see, when the naming container is different from the current page (something that happens when you use a master page) the UniqueID property return "aspnetForm". this property is rendered into the name attribute that is sent to the client in the form tag. so, if you really need to, you can create your own form by inheriting from htmlform and then override the UniqueID property or the Name property (this may be a better option).

An example custom HtmlForm class could be like this:

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

Note: You can certainly change the name of the form from "f" to something else, or have it read a dynamic value, say from a web.config file or so.

and used like so

<%@Register tagprefix="LA" Namespace="Mynamespace"%>
...
<LA:form runat="server" id="frm">
...
</LA:form>
Earlz
  • 62,085
  • 98
  • 303
  • 499
Carter Medlin
  • 11,857
  • 5
  • 62
  • 68
  • 5
    In ASP.NET 4, this behavior has changed. Even if the `` control is inside a naming container, it no longer hard-codes it to `aspnetForm`. It actually now has the correct client ID. I ran into a situation where we had a master page nested inside another master page. The nested master page is where the `
    ` is defined and had the exact same thing happening.
    – Sumo Jul 11 '12 at 12:20
5

Set the "clientidmode" attribute to "static" on the form tag to prevent the framework from overriding it with "aspnetForm". This was driving me nuts for hours.

parliament
  • 21,544
  • 38
  • 148
  • 238
  • 1
    For those who are not familiar with the attribute (as me): The attribute should be set in the master page parameters `<%@ Master ClientIDMode="Static"` ... . For more information http://weblog.west-wind.com/posts/2009/Nov/07/ClientIDMode-in-ASPNET-40 – IvanH Nov 14 '14 at 09:32
  • I used to use this but forgot how to do it, since I hadn't worked with the old Asp.net WebForms in awhile. Thanks! – John Foll Jan 06 '23 at 22:48
0

I am agree with @Sumo's comment under accepted answer and I had the same situation.

In ASP.NET 4.0, master page, if a is not given an id, the rendered html will be automatically assigned one, such as .

Otherwise, the rendered html will have its original defined id.

Yang
  • 111
  • 6
0

change in web config

<pages controlRenderingCompatibilityVersion="4.5" clientIDMode="AutoID"/>

to

<pages controlRenderingCompatibilityVersion="4.5"/>