web-dev-qa-db-ja.com

@ Html.BeginForm()はどのように機能しますか? ASP.Net MVC 5チュートリアルでの検索結果

私はMVC 5 Asp.Netに取り組んでおり、 this チュートリアルに従っています。 [フィルター]ボタンをクリックしたときに、結果がどのように取得されるのでしょうか。

このコードがMovie/view/Index.cshtmlに追加されるポイントがあります

@using (Html.BeginForm())
{    
     <p> Title: @Html.TextBox("SearchString") <br />   
     <input type="submit" value="Filter" /></p> 
} 

私の知る限り、テキストボックスと画面​​上のボタンを作成します。しかし、このボタンはどのようにしてsearch(index)関数を呼び出し、関数にtextboxの値を渡すのでしょうか。これを取得できませんでした。

39
Muhammad Faraz

ばかげた質問ではありません。 @html.BeginForm()は次のように機能します。 ActionControllerFormTypehtmlAttributesなど、追加できるパラメーターがいくつかあります。動作方法は、空のままにすると、現在のページと同じ名前の投稿アクションを探します。たとえば、ログインページにいる場合は、ログイン投稿アクションを探します。 actionおよびcontrollerにアクセスしたいものを常に書きます。

@Html.BeginForm("AddUser", "Admin", FormMethod.Post, new { @class = "my_form"}) {

}

したがって、post actionは、フォームに含まれるパラメーターを受け入れる必要があり、Model、つまりProductViewModel、または単一の文字列パラメーターにすることができます。検索の場合、アクションは次のようになります

[HttpPost]
public ActionResult Search(string SearchString) 
{
   //do something here
}

検索文字列がメソッドに渡されるため、ここで注意してください。 <input>の名前は、アクションが取るパラメーターと同じでなければなりません。フォームは次のようになります

@using (Html.BeginForm("Search", "YOUR CONTROLLER", FormMethod.Post)){    
     <p> Title: @Html.TextBox("SearchString") <br />   
     <input type="submit" value="Filter" /></p> 
} 

これが明快さをもたらすことを願っています。

57
Dejan.S