C#

フォームの名前を調べる

.aspxファイルに書かれている<form runat="server"/>の名前をサーバ側で調べる方法です。普通はフォーム名を必要としませんが、クライアントスクリプトでコントロールを操作する際に必要になることがあります。

System.Web.UI.Pageオブジェクトは、おそらくプライベートのFormというプロパティを持っていて、デバッグではこのオブジェクトのNameプロパティにフォーム名が見えますが、コーディングではアクセスできない保護レベルになっていて参照できません(※Request.Formと混同しないでください)。

Page.Controlsコレクションには通常3つのコントロールがあるようです。インデックス0には「<!DOCTYPE ...」から「<form runat="server" />」の手前までがLiteralControlクラスのオブジェクトとして、インデックス1には「<form runat="server" />」全体がHtmlFormクラスのオブジェクトとして、インデックス2にはそのあとのすべてがLiteralControlクラスのオブジェクトとして入っています。念のためHtmlFormクラスのオブジェクトを探して名前を参照するのがいいのではないでしょうか。

    public class SomeForm : System.Web.UI.Page
    {
	    private string FormName = "";

	    private void Page_Load(object sender, System.EventArgs e)
	    {
		    for (int i = 0; i < Controls.Count; i++)
		    {
			    HtmlForm form = Controls[i] as HtmlForm;

			    if (form != null)
			    {
				    FormName = form.Name;
				    break;
			    }
		    }
	    }
    }