データベースに存在するレコードの数に基づいてサーバー側のdivタグに挿入される基本的なHTMLフォームがあります。このHTMLフォームは問題なく表示され、すべてが見栄えがいいです。しかし、アクションページでは、コードビハインドから入力要素にアクセスすることはできません。 Requestスコープを使用しようとしましたが、そのアプローチでは空になりました。他の提案はありますか?
以下の提案はすべて素晴らしいものであり、通常はそれが私がすることです。しかし、これらのフォームはページのコンパイル後にオンザフライで構築されるため、runat = 'server'は何もしませんでした。それをHTMLページに渡しました。
プレーンHTMLフォームにアクセスしている場合、送信ボタン(またはJavaScriptポスト)を介してサーバーに送信する必要があります。これは通常、フォーム定義が次のようになることを意味します(メモリ不足になります。html要素が正しいことを確認してください)。
<form method="POST" action="page.aspx">
<input id="customerName" name="customerName" type="Text" />
<input id="customerPhone" name="customerPhone" type="Text" />
<input value="Save" type="Submit" />
</form>
次のように、customerNameおよびcustomerPhoneデータにアクセスできるはずです。
string n = String.Format("{0}", Request.Form["customerName"]);
あなたが持っている場合 method="GET"
(フォームでは推奨されません。URLスペースを台無しにします)、次のようにフォームデータにアクセスする必要があります。
string n = String.Format("{0}", Request.QueryString["customerName"]);
もちろんこれは、フォームが「投稿済み」、「送信済み」、または「ポストバック」経由で行われた場合にのみ機能します。 (つまり、誰かが「保存」ボタンをクリックしたか、これはjavascriptを介してプログラムで行われました。)
また、この方法でこれらの要素にアクセスできるのは、サーバーコントロール(つまり、runat="server"
)、サーバーコントロールではIDと名前が異なります。
私が推測しているのは、これらの入力要素をrunat = "server"に設定する必要があるということです。
したがって、コントロールにアクセスすることはできません
<input type="text" name="email" id="myTextBox" />
しかし、あなたはで働くことができるでしょう
<input type="text" name="email" id="myTextBox" runat="server" />
そして、それを使用して読む
string myStringFromTheInput = myTextBox.Value;
通常はRequest.Form["elementName"]
で実行する必要があります。
たとえば、<input type="text" name="email" />
がある場合、Request.Form["email"]
を使用してその値にアクセスできます。
IMOの最も簡単な方法は、すべての要素にIDとrunatサーバータグを含めることです。
<div id="MYDIV" runat="server" />
これらは動的に挿入されたコントロールのように聞こえるので、FindControl()に感謝するかもしれません。
Asp.netコードビハインドを使用しているため、要素にidを追加し、runat = serverを追加します。
その後、コードビハインドでオブジェクトを参照できます。