Asp.net mvc 使用表单字段中的ID通过路由生成URL(ASP.NET MVC)

Asp.net mvc 使用表单字段中的ID通过路由生成URL(ASP.NET MVC),asp.net-mvc,routing,forms,Asp.net Mvc,Routing,Forms,假设我想显示用户详细信息,如下所示: 我这样设置了一条路线: routes.MapRoute("UserDetails", "user/"{id}", new { controller = "User", action = "Details" }); 然后我的控制器: public ActionResult Details(int id) { User currentUser = _userRepository.GetUser(id); if (currentUser

假设我想显示用户详细信息,如下所示:

我这样设置了一条路线:

routes.MapRoute("UserDetails", "user/"{id}",
    new { controller = "User", action = "Details" });
然后我的控制器:

public ActionResult Details(int id)
{
    User currentUser = _userRepository.GetUser(id);
    if (currentUser == null) return View("NotFound");
    return View(currentUser);
}
到目前为止还不错。一切都像我期望的那样。现在我还需要一个表单,在这里可以输入ID进行查找,然后单击Submit以获得相同的结果。例如:

<% Html.BeginForm("Details","User",FormMethod.Post); %>
<input type="text" value="" name="id" id="userid" />
<%= Html.Button("Search For User","submit","searchforuser"; %>
<% Html.EndForm(); %>

这就是我现在迷路的地方。我不想只使用[AcceptVerbs(HttpVerbs.Post)]并尽可能使用RedirectToAction。我只想取他们输入的任何数字,比如38,然后访问www.mysite.com/user/38


直接MVC也能做到这一点吗?我确信有一些与jQuery相关的方法,但到目前为止,除了基本的jQuery警报之外,没有任何其他方法可以实现,所以现在我真的不想再浪费时间了。

MVC将自动按名称将查询参数(对于
GET
)或表单输入文件(对于
POST
)与操作参数按名称进行匹配。不幸的是,您的id与操作参数名称不匹配,因此MVC无法匹配它们。要解决此问题,您可以:

  • 上的id从
    用户id
    更改为
    id
  • 将详细信息操作的参数名称从
    id
    更改为
    userid
    (同时不要忘记更新路线)

我刚刚确认,至少第一个解决了MVC2 RC上的问题。我没有MVC1,所以我无法检查它是否也能正常工作,但据我所知,MVC1和MVC2匹配参数的方式没有重大差异。

因为只有你一个人费心回复,我别无选择,只能接受你的答案:)