如何根据名称执行asp.net mvc路由?

时间:2011-03-22 10:51:09

标签: asp.net-mvc asp.net-mvc-3

给定一个routename,我知道我可以通过查询RouteTable来获取路由但是如何实际执行路由指向的控制器操作并获得结果?

为了避免混淆,我应该指出我想要执行控制器操作并检查结果,而不是渲染它,重定向到它或链接到它。我这样做是在ValidationAttribute的子类中,但这应该无关紧要。重要的是它在服务器端代码而不在视图中。此外,控制器操作不返回视图或部分视图,而是返回其他类型的结果,包括JsonResult。我可以使用以下方法对控制器和操作进行硬编码:

var controller = (DefaultController)DependencyResolver.Current.GetService(typeof(DefaultController));

var result = controller.ValidateUsername(username) as JsonResult;

但我需要能够只使用routeName字符串。

我希望这不那么模糊。

更多信息:

我只是想尝试类似于在客户端和服务器上运行的内置remoteattribute验证器。对于客户端,它输出html-5数据属性,这些属性挂钩到jquery函数,该函数使用ajax回调到控制器操作并将结果作为json返回。然后js检查结果并呈现错误消息,如果不正确。对于服务器端验证,通常会覆盖ValidationAttribute的IsValid方法并放入验证逻辑中。在我的例子中,这涉及执行指定的控制器操作(即js调用的相同操作)并解析结果。因此,给定一个routename(或者一个控制器名称和actionname,如果更容易),我想执行该操作,并解析结果,在这种情况下是一个JsonResult。

2 个答案:

答案 0 :(得分:2)

似乎有一个Stack Overflow answer to your question already。至于使用RouteName - 你不能。实际上,你必须institute a hack just to get access to the RouteName

如果你愿意去探索ASP.NET MVC source,你可以自己创造一种方式,但是没有内置方式。

答案 1 :(得分:1)

您可以使用多种重定向方法,因为您在Action中使用了特别的问题:

return RedirectToRoute("RouteName");

  

下次写出正确的问题时,不要排除你从未问过的投票!


如果没有更多解释,很难知道你在做什么!