我在页面上有一个搜索框(实际上是在部分视图中,但不确定是否相关)和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”之间存在冲突。任何人都知道这里发生了什么,或者是否有另一种传递价值的方法?
此操作方法与发布搜索框数据所产生的操作分开。
答案 0 :(得分:5)
Html.Textbox
帮助器首先查找ModelState
(ASP.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):
}