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

时间:2009-08-06 21:43:19

标签: asp.net-mvc forms textbox

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

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

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

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”。似乎操作方法参数“query”和搜索框形式参数“query”之间存在冲突。任何人都知道这里发生了什么,或者是否有另一种传递价值的方法?

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

2 个答案:

答案 0 :(得分:5)

Html.Textbox帮助器首先查找ModelStateASP.NET MVC source,输入扩展文件行183,HtmlHelper.cs第243行)。最简单的解决方案是删除ModelState的“查询”:

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

    ModelState.Remove("query");

    return View();
}

答案 1 :(得分:0)

不知道这是不是问题,但我首先想到的是将视图数据传回控制器。

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