1

ページにJavascriptで生成されたフォーム投稿を追加しようとしています。MVC3フォームでPOSTに失敗しました 'パスにアクセスするのが許可されていません'

私は、次のルートに定義で始まっ:

routes.MapRoute(name: "ItemLinks", url: "ItemRequestController/DoItemRequest", defaults: new { controller = "ItemRequest", action = "DoItemRequest" }); 

しかし、私は私のコントローラのアクションメソッドでリクエストオブジェクトからフォームの値を取得することができませんでした。

だから、以下の経路定義:フォームは次のように定義される

routes.IgnoreRoute("ItemRequestController/{*pathInfo}"); 

を:JS関数で

@using (Html.BeginForm("DoItemRequest", "ItemRequestController", FormMethod.Post)) 
{ 
    @Html.AntiForgeryToken() 
    <input type="hidden" name="hid_ItemID" value="" /> 
    <input type="hidden" name="hid_PositionOnPage" value="" /> 

、私は隠しフィールドの(クリックに基づいて)の値を定義、その後、実行します。

document.forms[0].submit(); 

問題は、私は今のエラーを取得していますということです...

パス '/ ItemRequestController/DoItemRequest'へのアクセスに使用されたHTTP動詞POSTは許可されていません。

これを回避するにはどうすればよいですか?コントローラの動作方法でPOSTの値を読み込むにはどうすればよいですか?

- UPDATE -

私はにオープン...要求VARの引き上げ、よりエレガントな方法があります確信している...私はこれを追加するのを忘れ

を信じることができません提案。

コントローラ方法:

[ValidateAntiForgeryToken] 
[HttpPost] 
public ActionResult DoItemRequest() 
{ 
    int itemListID = 0; 
    int pagePositionNumber = 0; 
    int.TryParse(Request["itemListID"], out itemListID); 
    int.TryParse(Request["pagePositionNumber"], out pagePositionNumber); 
+1

コントローラメソッドはどのように見えますか?メソッドに許される動詞を制限していますか? –

+0

@GarrettVlieger - コントローラメソッドシグネチャをポストするのを忘れました。上記で更新されました。 – ElHaix

答えて

0
  1. まずとしてdefindされていることを確認し問題になる。 MVCは規約に基づいています(デフォルト実装)これを使用します。

    @using (Html.BeginForm("DoItemRequest", "ItemRequest", FormMethod.Post)) 
    { 
    @Html.AntiForgeryToken() 
    <input type="hidden" name="hid_ItemID" value="" /> 
    <input type="hidden" name="hid_PositionOnPage" value="" /> 
    

あなたはItemRequestControllerないItemRequestだけでコントローラ名を指定する必要があります。あなたのクラスはItemRequestControllerですが、デフォルトでpostfix Controllerです。MVCで追加します。したがって、BeginFormでItemRequestControllerを使用すると、見つからないItemRequestControllerControllerクラスが検索され、例外がスローされます。

これが問題を解決します。

2

今のGlobal.asax

から
  • をごignorerouteの一部を除去してください、あなたのコントローラメソッドは、すべてのHttpPost

    [HttpPost] // Or [AcceptVerbs(HttpVerbs.Post)] 
    public ActionMethod DoItemRequest(FormCollection data) 
    { 
    } 
    
  • 関連する問題