ASP.NET MVC - Html.TextBox - 未通过ViewData字典设置的值

Gen*_*ick 4 forms asp.net-mvc textbox

我在页面上有一个搜索框(实际上是在部分视图中但不确定是否相关)和Html.TextBox控件.

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

action方法将"query"作为参数,我编辑此值以清理传入的字符串:

public ActionResult SearchQuery(string query) {  

   ViewData["query"] = StringFunctions.ProperCasing(query.Replace("_", " "));  
Run Code Online (Sandbox Code Playgroud)

但是,当它到达Html.TextBox时,将保留原始查询值(在本例中为下划线).我可以看到编辑的值在ViewData字段中,例如,如果:

query == "data_entry"  
Run Code Online (Sandbox Code Playgroud)

然后,在传递给action方法之后

ViewData["query"] == "data entry"
Run Code Online (Sandbox Code Playgroud)

但是当它到达视图时,Html.TextBox中的值仍然是"data_entry".似乎操作方法参数"query"和搜索框形式参数"query"之间存在冲突.任何人都知道这里发生了什么,或者是否有另一种传递价值的方法?

此操作方法与发布搜索框数据所产生的操作分开.

eu-*_*-ne 5

Html.Textbox帮助器ModelState首先查找(ASP.NET MVC源,InputExtensions.cs第183行,HtmlHelper.cs第243行).最简单的解决方案是删除ModelStatefor"query":

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

    ModelState.Remove("query");

    return View();
}
Run Code Online (Sandbox Code Playgroud)