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"之间存在冲突.任何人都知道这里发生了什么,或者是否有另一种传递价值的方法?
此操作方法与发布搜索框数据所产生的操作分开.
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)
| 归档时间: |
|
| 查看次数: |
7214 次 |
| 最近记录: |