我有一个简单的部分,其中一个表单用作搜索栏。
@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,这样可以正常工作,因此我知道此操作有效,但它不适用于表单帖子。有什么想法吗?
感谢。
答案 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");
}
}
这现在可以正常使用,但我仍然想知道为什么如果任何身体有任何想法,这不起作用。欢呼声。