Rud*_*dey 2 forms asp.net asp.net-mvc url-parameters razor
我有一个显示人员列表的页面.它可以按名字和姓氏排序.为了搜索人物,我有以下剃刀形式:
@using (Html.BeginForm("Index", "Persons", new { sort = ViewBag.Sort }, FormMethod.Get))
{
<p>
Search: @Html.TextBox("search", ViewBag.Search as string)
<input type="submit" value="Search" />
</p>
}
Run Code Online (Sandbox Code Playgroud)
ViewBag.Search并ViewBag.Sort包含最后使用的search和sortrouteValues.当我按照名字对人员列表进行排序时,表单会以HTML格式呈现:
<form action="/persons?sort=firstname" method="get">
<p>
Search: <input id="search" name="search" type="text" value="" />
<input type="submit" value="Search" />
</p>
</form>
Run Code Online (Sandbox Code Playgroud)
按照预期,?sort=firstname包含在行动中.但是,当我按下提交按钮(搜索)时,sort参数将丢失.新网址只有?search=....我怎样才能解决这个问题?
当你看输出html时你会得到这样的东西:
<form action="/persons/index?sort=asc" method="get">
<p>
<input type="text" name="search" />
<input type="submit" value="Search" />
</p>
</form>
Run Code Online (Sandbox Code Playgroud)
这似乎是完全合法的,你会期望像追加帖子输入的查询这样的行为.但是这受到HTTP规范的限制.不会附加表单后期操作的查询字符串.这就是为什么您的查询参数不能在您的服务器端工作.然而,我会期望从Asp.net自动获取表单的参数到隐藏字段.
作为一个正确的解决方案,您必须在表单中输入输入,以便您可以使用隐藏字段来执行此操作,如:
@using (Html.BeginForm("Index", "Persons", FormMethod.Get))
{
@Html.Hidden("sort",ViewBag.Sort)
<p>
Search: @Html.TextBox("search", ViewBag.Search as string)
<input type="submit" value="Search" />
</p>
}
Run Code Online (Sandbox Code Playgroud)
您需要sort在表单中存储某个值,以便将其作为提交的一部分包含在内.您可以尝试隐藏输入:
@using (Html.BeginForm("Index", "Persons"))
{
<input type="hidden" id="sort" value="firstname" />
<p>
Search: @Html.TextBox("search", ViewBag.Search as string)
<input type="submit" value="Search" />
</p>
}
Run Code Online (Sandbox Code Playgroud)
您可能需要调整如何检索sort的值,我firstname举一个示例,但是当您提交表单时,sort将包含在有效负载中,例如
[HttpPost]
public ActionResult Index(string sort, string search)
{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5370 次 |
| 最近记录: |