2015-07-11 60 views
-1

我有一个简单的部分,其中用作搜索栏的表单。MVC表单没有提交到正确的行为

@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]属性。

的操作是这样的:

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

当属性是在使用表格将张贴到这个网址:

/项目/详细代码= PP61

,它没有映射到正确的动作。相反,我得到一个资源无法找到错误。

预期/所需的URL看起来应该像

/项目/ PP61 /详细

如果我创建一个Url.Action或浏览网址这工作得很好,所以我知道这行动起作用,但它不适用于表单发布。任何想法为什么?

谢谢。

回答

0

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

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

这现在可以正常工作,但我还是很想知道为什么这个没有工作,开始用,如果任何机构有任何想法。干杯。

0

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

+0

都能跟得上这没有奏效:( –

+0

如果您删除“[路线(” {}代码/详细信息“)]”? –

+0

对不起,这里错过了PP61交易.. –