2015-07-11 54 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交易.. –