web-dev-qa-db-ja.com

asp.netコードビハインドからHTMLフォーム入力にアクセスする方法

データベースに存在するレコードの数に基づいてサーバー側のdivタグに挿入される基本的なHTMLフォームがあります。このHTMLフォームは問題なく表示され、すべてが見栄えがいいです。しかし、アクションページでは、コードビハインドから入力要素にアクセスすることはできません。 Requestスコープを使用しようとしましたが、そのアプローチでは空になりました。他の提案はありますか?

以下の提案はすべて素晴らしいものであり、通常はそれが私がすることです。しかし、これらのフォームはページのコンパイル後にオンザフライで構築されるため、runat = 'server'は何もしませんでした。それをHTMLページに渡しました。

33
user18411

プレーン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と名前が異なります。

66
Bryan Rehbein

私が推測しているのは、これらの入力要素をrunat = "server"に設定する必要があるということです。

したがって、コントロールにアクセスすることはできません

<input type="text" name="email" id="myTextBox" />

しかし、あなたはで働くことができるでしょう

<input type="text" name="email" id="myTextBox" runat="server" />

そして、それを使用して読む

string myStringFromTheInput = myTextBox.Value;
21
Bjorn Verryt

通常はRequest.Form["elementName"]で実行する必要があります。

たとえば、<input type="text" name="email" />がある場合、Request.Form["email"]を使用してその値にアクセスできます。

9
Gant

IMOの最も簡単な方法は、すべての要素にIDとrunatサーバータグを含めることです。

<div id="MYDIV" runat="server" />

これらは動的に挿入されたコントロールのように聞こえるので、FindControl()に感謝するかもしれません。

2
rlb.usa

Asp.netコードビハインドを使用しているため、要素にidを追加し、runat = serverを追加します。

その後、コードビハインドでオブジェクトを参照できます。

0
Eppz