2009-08-06 51 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): 
}