2011-06-07 27 views
4

何らかの理由でGetとPostの両方が最初のアクションを実行します。MVC HttpPost属性が機能しない

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

[HttpPost] 
public ActionResult Login(FormCollection form) 
{ 
    // Login Stuff here... never gets reached! 
} 

私は基本的にこれをMVCミュージックストアサンプルから直接コピーしました。別のアプリで試してみるとうまくいきました。

これはかなり新しいプロジェクトで、Visual Studioの基本MVC3プロジェクトテンプレートをすべてデフォルト設定にしました。

私は、HTML出力は、POSTメソッドを指定することを確認しました:

:私は私のブラウザで次のURLを参照してくださいフォームを送信した後ここで

<form action="/Home/Login" method="post"> 

は私Login.cshtml

@{ 
    ViewBag.PageTitle = "Login"; 
} 
<section id="index"> 
<header> 
    <h2>Login</h2> 
</header> 
<content> 
    @using (Html.BeginForm("Login", "Home", FormMethod.Post)) 
    { 
     <panel id="login"> 
      <table> 
       <tr> 
        <td>Email:</td> 
        <td><input name="Email" /></td> 
       </tr> 
       <tr> 
        <td>Password:</td> 
        <td><input name="Password" type="password" /></td> 
       </tr> 
       <tr> 
        <td colspan="2" align="center"><input type="submit" value="Login" /></td> 
       </tr> 
      </table> 
     </panel> 
    } 
</content> 
</section> 

です

http://localhost:51606/Home/[email protected]&Password=mypass

これらのフィールドはURL内にあってはなりません!なぜ私のフォームがGETリクエストに変換されるのですか?

+2

私はあなたのコードをコピーしましたが、うまくいきました。申し訳ありませんが、私は何を提案するか分からない!たぶん...正しいビューが使用されていることを確認しますか? – Beno

+0

@ベノ:下記の私の答えを見てください。私はHTMLの出力全体を最初に見ていたはずです。 –

答えて

4

HTML出力をもう少し見て、自分のフォームを囲む別のフォームタグを見つけました。

誰か(私)は、デフォルトの共有レイアウトであるViews/Shared/_Layout.cshtmlにフォームタグを入れます。

bah、ここで質問を入力した後に問題が見つかります。

1

フォームタグにmethod = "post" action = ""を追加しました。

@{ 
    ViewBag.Title = "Add New Entry"; 
} 

<h2>Add New Entry</h2> 


<form method="post" action=""> 

     <fieldset> 

      Please enter your name: <br /> 
      <input type="text" name="Name" maxlength="200" /> 
      <br /><br /> 
      Please enter your message: <br /> 
      <textarea name="Message" rows="10" cols="40"> </textarea> 
      <br /><br /> 
      <input type="submit" value="Submit Entry" /> 
     </fieldset> 
</form>  
関連する問題