2016-08-11 3 views
1

私は私のフォーム以下のヘルパーラップするために使用しています:ASP.NET MVC:リクエストが間違った方法でキャッチされているのはなぜですか?

[SomeFilter] 
    [ChildActionOnly] 
    [AcceptVerbs(HttpVerbs.Get)] 
    public PartialViewResult Edit(int id) 
    { 
     //Some Code 
    } 

    [SomeFilter]   
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit(MyViewModel model, string submit) { 
     //Some Code 
    } 
:私は二つの方法、私の部分図とPOSTリクエストを処理するための別のものをロードするための1つを持っている私のコントローラで

@using (Html.BeginForm("Edit", "MyController", FormMethod.Post)) { ... } 

ユーザーが空のフォームを送信する場合を除いて、すべてが正常に機能しているようです。その場合、要求はPOSTメソッドの代わりにGETメソッドによって捕捉されています。

"アクション 'Edit'は子リクエストによってのみアクセス可能です。

GETオーバーロードには[ChildActionOnly]フィルタしかありません。私はなぜこれが起こっているのか分からない。両方とも異なっており、両方とも装飾されています。

提案がありますか?

部分図コード:

@model MVC.Models.MyViewModel 

@using (Html.BeginForm("Edit", "MyController", FormMethod.Post)) 
{ 
    @Html.HiddenFor(m => m.Id) 
    @Html.AntiForgeryToken() 

    <div class="row margin-top-20 form-group text-center"> 
     <div class="col-md-3 col-lg-offset-2"> 
     @Html.LabelFor(m => m.ManyItemsAvailable) 
     @Html.ListBox("ManyItemsAvailable", Model.ItemsAvailable) 
     </div> 
     <input type="submit" class="btn btn-default" value=">" id="add" name="submit" /> 
     <input type="submit" class="btn btn-default margin-top-10" value="<" id="remove" name="submit" /> 
     <div class="col-md-3"> 
     @Html.LabelFor(m => m.ManyItemsSelected) 
     @Html.ListBox("ManyItemsSelected", Model.ItemsSelected) 
     </div> 
    </div> 
} 
+0

フォームリロードで呼び出されるだけではないですか?私はブラウザからそれをデバッグし、どの点でサーバーが呼び出され、ブラウザから送信されているものと一致するかを確認します。 – Igor

+0

@Igorではなく、いくつかのブレークポイントがあります。サブミットをクリックするとすぐに例外がスローされ、ChildActionOnlyフィルタが使用されているため、コントローラに到達することはありません。 –

+0

カミソリビューを投稿できますか? –

答えて

0

だから、私は、これらにボタンを提出両方の置き換え:

<input type="submit" class="btn btn-default" value=">" id="add" name="submit" /> 
<input type="submit" class="btn btn-default margin-top-10" value="<" id="remove" name="submit" formmethod="post" /> 

は、明示的= "ポスト" をformmethod指定すると、今、期待通りに働いています。

関連する問題