我有一个搜索用户的简单表单
<p>Enter a user's id number to search:</p>
<% using (Html.BeginForm("Search", "UserAdmin", FormMethod.Get)) { %>
<%= Html.TextBox("id") %>
<input type="submit" value="Search" />
<% } %>
我希望此链接转到useradmin / search / {id},但链接呈现为useradmin / search?id = {id}
两个网址都是有效的,并按照我的预期映射到我的操作,我只是觉得前者更整洁,并且希望使用这种风格。
根据Michael Gattuso的回答,我将此作为一种有效的解决方案。不优雅,但它有效。
<p>Enter a user's id number to search:</p>
<% using (Html.BeginForm("SearchPost", "UserAdmin")) { %>
<%= Html.TextBox("id") %>
<input type="submit" value="Search" />
<% } %>
public ActionResult Search(string id)
{
var result = _Service.SearchForUsers(id);
return View(result);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SearchPost(string id)
{
return RedirectToAction("Search", new { id = id });
}
答案 0 :(得分:0)
这不是MVC问题。使用GET的表单请求将根据您获得的呈现将输入附加到查询字符串。由于请求不通过路由引擎,MVC中没有任何内容可以解决此问题。您的选择是POST表单并将其路由或使用javascript。
<强>更新强>
要在MVC中执行此操作,请使用表单POST
<p>Enter a user's id number to search:</p>
<% using (Html.BeginForm("Search", "UserAdmin", FormMethod.Post)) { %>
<%= Html.TextBox("id") %>
<input type="submit" value="Search" />
<% } %>
使用相应的动作:
[AcceptVerb("Post")]
[ActionName("Search")] //I assume your current search action has this same signature so use alias
public ActionResult SearchPost(int id){
return new ActionResult("Search", new { Id = id });
}