私はウェブページを持っています。上部には、 内にある検索バーがあります<form id="form1" runat="server">
。
また、同じページに、ユーザーが詳細を登録できるフォームを追加したいと考えています。問題、ASP.NET はページごとに 1 つのフォームしか許可しません。
どうすれば目標を達成できますか? 回避策はありますか?
私はウェブページを持っています。上部には、 内にある検索バーがあります<form id="form1" runat="server">
。
また、同じページに、ユーザーが詳細を登録できるフォームを追加したいと考えています。問題、ASP.NET はページごとに 1 つのフォームしか許可しません。
どうすれば目標を達成できますか? 回避策はありますか?
@Simonの回答ですでに述べたように、コードに複数のクリックハンドラーを含めるのは簡単です。ページで必要なものを正確に処理するために、これが「複数のフォームの欠如」の問題を解決する最も簡単な方法です。
この状況で非常に役立つものは、コントロールのDefaultButton
属性です。<asp:Panel>
つまり、ページの複数の領域に(たとえば)<asp:TextBox>
コントロールがあり、それらの各領域に特定の領域が<asp:Button>
関連付けられている場合、フォーカスがテキストボックスの1つにある場合は、を押すReturnかEnter、DefaultButton
クリックされます。
例えば...
<asp:Panel runat="server" DefaultButton="btnSearch">
Search: <asp:TextBox runat="server" id="txtSearcn"/>
<asp:Button runat="server" id="btnSearch" Text="Search" OnClick="btnSearch_Click"/>
</asp:Panel>
呼び出したいコードをさまざまなボタンクリックイベントに配置します。したがって、検索ボタンがクリックされると、検索ボタンのクリックイベントのコードのみが実行されます。登録ボタンがクリックされると、登録クリックイベントのコードのみが実行されます。
次に例を示します。
protected void Page_Load(object sender, EventArgs e) {
// Common code
}
protected void btnSearch_Click(object sender, EventArgs e) {
// Search code
}
protected void btnRegister_Click(object sender, EventArgs e) {
// Register code
}
デザイナのボタンをダブルクリックすると、コードビハインドにクリックイベントが作成されます。
1つのページに配置できるサーバー側フォームは1つだけです。
オプションの場合は、クライアント側のフォーム(runat="server") with a separate action - this POST can go to a different page, where you will have to access
投稿された値を取得するためのRequest.Form`なし)を使用できます。
別のオプションは、異なるイベントハンドラーで投稿するために別々のボタンを使用することです。
単純な HTML フォーム アプローチを使用できますが、常にページ全体をポスト バックするという問題があります。または mvc を使用します。