MVC表单未提交正确的操作

时间:2015-07-11 17:01:35

标签: forms asp.net-mvc-5

我有一个简单的部分,其中一个表单用作搜索栏。

@using (Html.BeginForm("Details", "Projects", FormMethod.Get))
{
<div class="row" style="margin-bottom: 20px;">
    <div class="col-lg-3 pull-right">
        <input type="search" class="form-control" placeholder="Search Code" id="projectSearch" name="code" />
    </div>
</div>
}

这应该发布到我的项目控制器详细信息操作,但是这没有发生,我相信这是因为应用于操作的[Route]属性,因为当我发表评论时,表单正确发布。但是我想使用[Route]属性。

动作如下:

[HttpGet]
[Route("{code}/Details")]
public ActionResult Details(string code)
{
    if (code == null)
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        ...
    return View(viewModel);
}

当该属性正在使用时,表单将发布到此URL:

  

/项目/细节?代码= PP61

未映射到正确的操作。相反,我得到的资源无法找到错误。

预期/期望的网址应该看起来像

  

/项目/ PP61 /细节

如果我创建Url.Action或浏览到URL,这样可以正常工作,因此我知道此操作有效,但它不适用于表单帖子。有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:0)

在控制器上将[HttpGet]更改为[HttpPost],在视图中将FormMethod.Get更改为FormMethod.Post。

答案 1 :(得分:0)

我有一个问题的解决方案,但它没有回答为什么这不起作用。我创建了一个单独的操作,用于搜索栏的POST,此操作然后重定向到我试图首先到达的GET操作。

 [HttpPost]
 public ActionResult ProjectSearch(string code)
 {
     if (code != "")
     {
         return RedirectToAction("Details", new { code });
     }
     else
     {
         return RedirectToAction("Index");
     }
 }

这现在可以正常使用,但我仍然想知道为什么如果任何身体有任何想法,这不起作用。欢呼声。