asp.net mvc强制样式获取表单上的url

时间:2009-12-04 12:12:33

标签: c# asp.net-mvc url routing

我有一个搜索用户的简单表单

<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 });
    }

1 个答案:

答案 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 });
}