2016-04-05 9 views
0

フォームからコントローラアクションにデータを送信できません。 HTML.BeginForm()を使用してフォームを作成しましたが、手動でクエリ文字列を作成するとうまく動作するコントローラがありますが、コントローラアクションでフォームを動作させる方法がわかりません。フォームデータをコントローラアクションに正しく投稿するにはどうすればよいですか?

<form class="navbar-form navbar-left"> 
        <div class="form-group> 
         @using (Html.BeginForm("GeneralSearch", "Search", FormMethod.Post)) 
         { 
          @Html.TextBox("searchString") 

          <button type="submit" class="default">Submit</button> 
         } 

        </div> 
       </form> 

そして、私のコントローラで私は現在、ASP.NETが自動的にそこに置かれHttpGet属性を持っています。しかし、それをHttpPostに変更しても問題は解決しません。単にデフォルトのコントローラ、代わりに私が指定した「検索」のコントローラのアクションをロード

http://localhost:64562/?searchString=test

:私はテキストを入力して、フォームを送信

[HttpGet] 
    public ActionResult GeneralSearch(string searchString) 
    { 
     return View("SearchResult", viewModel); 
    } 

、ネットワーク要求がに送信されますusingステートメント特定のアクションに正しく投稿するにはどうすればよいですか?

+0

見ている必要があります。バインディングを動作させるには 'name =" searchString "で入力が必要です。また、フォームアクションはPostですが、あなたのアクションは '[HttpGet]'とマークされています。 GETパラメーターは、要求本体で渡された照会ストリングとPOSTパラメーターを介して渡されます。 – Jasen

+0

Textboxメソッドで与えられた名前がHTMLで使用されている名前ではありませんか? – user9993

+1

@ user9993 - オンラインチュートリアルを完了したり、読んだりするのが最善でしょう。 [MVCのビューからコントローラへのデータの取得](http://www.c-sharpcorner.com/UploadFile/3d39b4/getting-data-from-view-to-controller-in-mvc/)のようなものです。別の方法は、間違いでそれを苦労して遭遇することです。 – Igor

答えて

1

GETを待機しているメソッドにPOSTしています。

スイッチがFormMethod

@using (Html.BeginForm("GeneralSearch", "Search", FormMethod.Get)) 
+1

おそらく既存の 'HttpGet'についてコントローラの動作に何かを追加するべきでしょう。 – Igor

3

Html.BeginForm(<Form>タグが追加されますが、私はあなたが下図のように別のフォームタグ内のフォームタグを追加しようとしている見ます。それは間違っている。

<form class="navbar-form navbar-left"> 
        <div class="form-group> 
         @using (Html.BeginForm("GeneralSearch", "Search", 

ここでも、あなたのコントローラはGETPOST要求に応えるためにさまざまなアクションメソッドを公開しなければならないとするのではなく、フォームのレンダリングされたHTMLで

public ActionResult GeneralSearch() 
{ 
    return View(); 
} 

[HttpPost] 
public ActionResult GeneralSearch(string searchString) 
{ 
    return View("SearchResult", viewModel); 
} 
関連する問題