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匹配参数的方式没有重大差异。因为只有你一个人费心回复,我别无选择,只能接受你的答案:)