2009-08-06 70 views
4

我在Html.TextBox控件的頁面上有一個搜索框(實際上是在局部視圖中,但不確定是否相關)。ASP.NET MVC - Html.TextBox - 未通過ViewData詞典設置的值

<%= Html.TextBox("query", ViewData["query"], new { style = "width: 90%;" })%> 

的操作方法採用「查詢」作爲參數,我編輯該值來清理傳入的字符串:

public ActionResult SearchQuery(string query) { 

    ViewData["query"] = StringFunctions.ProperCasing(query.Replace("_", " ")); 

然而,當它到達Html.TextBox原始查詢值(在本例中爲下劃線)將被保留。我可以看到,所編輯的值是在ViewData的領域,因此,例如,如果:

query == "data_entry" 

然後,在被傳遞到操作方法

ViewData["query"] == "data entry" 

但該值,當它到達查看,在Html.TextBox中仍然是「data_entry」。似乎行動方法參數「查詢」與搜索框形式參數「查詢」之間存在衝突。任何人都知道這裏發生了什麼,或者如果有另一種方式來傳遞價值?

此操作方法與發佈搜索框數據所產生的操作是分開的。

回答

5

Html.Textbox幫助查找ModelState第一(ASP.NET MVC source,InputExtensions.cs線183,HtmlHelper.cs線243)。最簡單的解決方案是將「ModelState」移除爲「查詢」:

public ActionResult SearchQuery(string query) 
{ 
    ViewData["query"] = StringFunctions.ProperCasing(query.Replace("_", " ")); 

    ModelState.Remove("query"); 

    return View(); 
} 
0

不知道這是不是問題,但我的第一個想法是將視圖數據傳回控制器。

public ActionResult SearchQuery(string query) 
{  
    ViewData["query"] = StringFunctions.ProperCasing(query.Replace("_", " ")); 
    return view(ViewData): 
}