我正在使用以下帮助器包装表单:
@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>
}
答案 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”,它现在按预期工作。