私の見解にはフォームエリアがあります。ボタンをクリックするとA送信したい/Books/1ボタンをクリックするとB送信したい/Books/2
MVCでこれを達成するにはどうすればよいですか?
私の見解にはフォームエリアがあります。ボタンをクリックするとA送信したい/Books/1ボタンをクリックするとB送信したい/Books/2
MVCでこれを達成するにはどうすればよいですか?
<form id="form1" name="form1" action="/Books/" method="get">
<input type="text" name="search" value="">
<input type="submit" name="id" value="1">
<input type="submit" name="id" value="2">
</form>
あなたがやりたいことは、たとえば Search アクションで Books Controller を呼び出すことのようです。したがって、たとえば、/Books/Search/<検索式>/1 や /Books/Search/<検索式>/2 などを呼び出すことができます (これらの URL をフォーマットする方法はいくつかありますが、ほとんどは個人的な好みの問題だと思います) URL を上記のように (URL のアクションなしで) 表示したい場合は、次のようなルーティングで実現できます。
routes.MapRoute(
"Books",
"Books/{searchExpr}/{pageId}",
new { controller = "Books", action = "Search", searchExpr = "", pageId = 1 }
);
主な問題は、おそらく URL またはクエリ文字列で情報をサーバーに送信する方がよい状況で、WebForms PostBack のすべてのパラダイムを使用しようとしていることにあると思います。実際にここにフォーム データを投稿するのは、ユーザーが実際に検索ボックスに何かを入力してSearchボタンをクリックしたときだけです。その時点で、コントローラーは ViewData に詰め込むことで、検索式を適切なビューに渡します。 、そこから、ビューはそれを引き出して、結果ページのテキストボックスに再入力できます。
MVC ビューは「ページ」に複数のフォームを持つことができるため、個別のセクションを作成し、それぞれに独自のフォーム アクションを与えるだけです。
<form id="form1" name="form1" action="/Books/1" method="get">
<!--...form fields-->
</form>
<form id="form2" name="form2" action="/Books/2" method="get">
<!--...form fields-->
</form>
フォームフィールドを2つのフォームにアタッチする機能は見たことがありませんが、機能しないようです。あなたができることは、2番目のフォームに隠しフィールドを置くことです。これは、送信時に、最初のフォームのテキストボックスから情報を取得します。