2011-01-04 13 views
2

私のコードは十分に簡単です。なぜ私のasp.net mvcフォームはGETの代わりにPOSTingですか?

<% using(Html.BeginForm(FormMethod.Get)) %> 
    <% { %> 
     Search for in Screen Name and Email: <%: Html.TextBox("keyword", Request.QueryString["keyword"]) %> 
     <button type=submit>Search</button> 
    <% } %> 

私はに実行している問題は、私がこのフォームを送信すると、値はクエリ文字列に追加されていないということです。代わりに、フォームが投稿リクエストによって送信しているようです。生成されたHTMLを見ると、次のようになります。

<form action="/find/AdminMember/MemberList" method="post"> 
     Search for in Screen Name and Email: <input id="keyword" name="keyword" type="text" value="" /> 
     <button type=submit>Search</button> 
    </form> 

なぜ誰が知っていますか?これはかなりシンプルでわかりやすいようです。

答えて

7

BeginFormヘルパーの正しい署名はこれです:あなたはBeginForm(FormMethod.Get)を書くとき

<% using(Html.BeginForm("SomeAction", "SomeController", FormMethod.Get)) %> 
<% { %> 
    Search for in Screen Name and Email: 
    <%: Html.TextBox("keyword", Request.QueryString["keyword"]) %> 
    <button type="submit">Search</button> 
<% } %> 

あなたは基本的にrouteValuesパラメータがFormMethod.Getとされ、デフォルトの動詞としてPOSTを使用していますとは何の関係もありませんthis signatureを呼び出しています。

+0

ok ...彼らは '(Html.BeginForm(FormMethod.Get))'を使って作業して欲しいと思います。投稿は、アクションとコントローラを明示的に指定することなく動作します。私はGETがなぜそうでないのか分からない。少なくともランタイムエラーが発生するはずです。 – quakkels

+2

それは大変面倒ですが、すべてのオーバーロードを見れば、それを行う方法は本当にありません。 – hunter

+0

@quakkelsでは、このようなオーバーロードは組み込まれていませんが、同じタスクを達成するための拡張メソッドを簡単に記述することができます。 –

0

FormMethodを設定するために修飾する必要があります

はあなたかのように見えるrouteValuesパラメータとしてFormMethod.Getを渡していますBeginFormに正しいオーバーロードを使用していない場合は、さまざまなオーバーロードに対してhereをチェックしてください。

関連する問題