2012-05-12 7 views
2

以下はコントローラとビューです。 [送信]ボタンがクリックされると、アプリケーションは「リソースが見つかりません」というエラーを発生させます。私はGetとPostを使用することがMVCの非常に基本的な概念であることを知っています。 GetとPostを使うときの実用的なシナリオと、それに続くコードとは何かを考えて、私にコンセプトを明確にするだろうか?ASP.NET MVC 3 RAZOR:POSTを使用すると、「リソースが見つかりません」というエラーが表示されます。

コントローラー:

namespace MVCModelBinding.Controllers 
{ 
    public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View(); 
     } 
     [HttpPost, ActionName("Index")] 
     public ActionResult IndexPost() 
     { 
      if (Request.Form.Count > 0) 
      { 

       string id = Request.Form["ID"]; 

       string fname = Request.Form["FirstName"]; 

       string lname = Request.Form["LastName"]; 

       ViewBag.StatusMessage = "Employee data received successfully for ID " + id + "!"; 

      } 

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

ビュー(index.chtml)

@using (Html.BeginForm("IndexPost", "HomeController",FormMethod.Post)) 
{ 
    <table> 
     <tr> 
      <td> 
       Employee ID 
      </td> 
      <td> 
       @Html.TextBox("ID") 
      </td> 
     </tr> 
     <tr> 
      <td> 
       First name 
      </td> 
      <td> 
       @Html.TextBox("FirstName") 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Last Name 
      </td> 
      <td> 
       @Html.TextBox("LastName") 
      </td> 
     </tr> 
     <tr> 
      <td colspan="2"> 
       <input type="submit" value="Submit" /> 
      </td> 
     </tr> 
    </table> 
} 

おかげ

ポール

答えて

7

フォームのために使用されるアクション名およびコントローラー名が間違っています。それはそれはあなたがActionNameAttributeで指定したものだから、アクション名がちょうど"Index"ある

@using (Html.BeginForm("Index", "Home", FormMethod.Post)) 

でなければなりません。コントローラ名には、 "Controller"接尾辞を含めないでください。

+0

ありがとうございました。 @ Html.ActionLink( "Search"、 "Index")のようなアクションリンクができます。 の代わりにフォームを投稿するために使用されます。 ORアクションリンクは常にGETメソッドを探しますか? – Paul

+0

@Paul:リンク自体はフォームを送信しません。これは、HTMLで規定された標準のブラウザ動作であり、ASP.NET MVCとは関係ありません。 Javascriptを使用してフォームを送信することができます(また、 'POST'によって送信が行われるように選択することもできます)。ただし、クリック時にフォームをシリアライズしてAJAX要求を手動で行う必要があります。 – Jon

関連する問題