ASP.NET MVC: Why request is being caught by the wrong method?
<p>I'm using to wrap my forms the following helper:</p>

<pre><code>@using (Html.BeginForm("Edit", "MyController", FormMethod.Post)) { ... }
</code></pre>

<p>In my Controller I have two methods, one for loading my partial view and another one for processing the Post request:</p>

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

    [SomeFilter]        
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(MyViewModel model, string submit) {
       //Some Code
    }
</code></pre>

<p>Everything seems to be working fine except when users submit an empty form. In that case request is being caught by GET Method instead of POST one. I know it's calling the GET method because I get an exception as:</p>

<p>"The action 'Edit' is accessible only by a child request."</p>

<p>And only the GET overload has [ChildActionOnly] filter. I don't understand why is this happening. Both are different and both are decorated. </p>

<p>Any suggestions?</p>

<p><strong>Partial View code:</strong></p>

<pre><code>@model MVC.Models.MyViewModel 

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

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