2009-08-06 13 views
4

Html.TextBoxコントロールを使用して、ページに検索ボックスを表示しています。ASP.NET MVC - Html.TextBox - 値がViewDataディクショナリで設定されていません

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

アクションメソッドは、パラメータとして「クエリ」を取り、そして私は、渡された文字列をクリーンアップするために、この値を編集します。それはHtml.TextBoxになったとき、しかし

public ActionResult SearchQuery(string query) { 

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

を元のクエリ値(この場合はアンダースコア)が保持されます。私が編集した値はViewDataをフィールドにあることを確認できるので、例えば、場合:

query == "data_entry" 

そして、後には、それが到達したときに、アクションメソッド

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

が、値に渡されますHtml.TextBoxのビューはまだ "data_entry"です。アクションメソッドパラメータ "query"と検索ボックスフォームパラメータ "query"の間に衝突があるようです。誰がここで何が起こっているのか、あるいは値を渡す別の方法があるのか​​知っていますか?

この操作方法は、検索ボックスのデータを送信した結果の操作とは異なります。

答えて

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): 
} 
関連する問題