ASP.NET MVC:为什么请求被错误的方法捕获?

时间:2016-08-11 14:06:39

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我正在使用以下帮助器包装表单:

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

在我的控制器中,我有两种方法,一种用于加载我的局部视图,另一种用于处理Post请求:

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

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

除非用户提交空表单,否则一切似乎都正常。在这种情况下,请求被GET方法而不是POST方法捕获。我知道它调用GET方法因为我得到一个例外:

"动作'编辑'只有儿童请求才能访问。"

只有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>
}

1 个答案:

答案 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 =“post”,它现在按预期工作。