Asp.Net MVC路由表和控制器操作

5

我正在使用.NET的MVC框架创建一个包含成员和他们个人资料的目录。

我有一个视图,允许您根据一些条件查找成员,所以我的控制器有一个Find()操作结果,然后另一个接受POST动词。因此,somesite.com/members/find显示搜索工具,一旦表单提交,相同的网址就会显示结果。现在,我想要成员名称链接到同一控制器中用于显示其个人资料的另一个actionresult方法,并且我希望url遵循此模式somesite.com/members/{username}。

我如何创建一个控制器方法来实现这一点? 是否还有其他要考虑的问题?
我需要在global.asax中映射新路由吗?

感谢您的帮助。

1个回答

4

首先,在控制器上创建您的操作方法,如下所示:

public ActionResult Profile(string userName)
{
    // Do What you want with the userName
    throw new System.NotImplementedException();
}

然后在global.asax文件中创建一个新的路由来处理somesite.com/members/{username},如下:

routes.MapRoute(
    "Profile",
    "members/{username}",
    new { controller = "Members", action = "Profile", userName = "" }
);

就是这样。我不确定你所称的控制器将托管哪个操作方法。我假设是成员。


感谢您的快速回复...地图路由名称与 ActionResult 方法名称之间是否存在相关性(例如,Profile-Profile)? - Jeremy
我的控制器是“Vendor”,类名为VendorController...每个供应商都应该有一个档案。因此,在global.asax中,我添加了一个名为“Profile”的路由,URL为“vendor/{username}”,默认值为“new {controller =“Vendor”,action =“Profile”,userName =“”}”。 - Jeremy
啊,我明白问题了。在你上面的评论中,你指出你浏览到了somesite.com/members/someuser,但是你刚才给我的路由url是“vendor/{username}”。如果你想使用members/someuser,那么请把url改回“members/{username}”。 - Dale Ragan
否则,请导航至somesite.com/vendor/someuser,这将调用您设置的操作。 - Dale Ragan
好的...那似乎就是问题所在了...虽然现在我又有了一个新问题。不过我认为我可以解决它。看起来默认路由与这个路由冲突,因为somesite.com/vendor/find应该显示查找视图,但实际上它将其视为用户名。 - Jeremy
显示剩余13条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接