当前位置: 首页 > 编程语言 > C#

Asp.NetMVC:如何获取当前控制器-视图的虚拟URL?

时间:2023-04-10 15:34:48 C#

Asp.NetMVC:如何获取当前控制器/视图的虚拟URL?是否可以获取与控制器操作或视图关联的路由/虚拟URL?我看到Preview4添加了LinkBuilder.BuildUrlFromExpressionhelper,但如果你想在master上使用它不是很有用,因为控制器类型可能不同。任何想法表示赞赏。我总是尝试实现满足项目要求的最简单的解决方案。正如厄恩斯坦所说,“让事情尽可能简单,但不要那么简单。”尝试这个。这对我有用:它返回当前的Url;/Home/About也许有更简单的方法来返回实际的路由字符串?您可以从ViewContext.RouteData获取该数据。以下是如何访问(和使用)该信息的一些示例:///这些已添加到我的viewmasterpage、viewpage和viewusercontrol基类:publicboolIsController(stringcontroller){if(ViewContext.RouteData.Values["controller"]!=null){returnViewContext.RouteData.Values["controller"].ToString().Equals(controller,StringComparison.OrdinalIgnoreCase);}返回假;}publicboolIsAction(stringaction){if(ViewContext.RouteData.Values["action"]!=null){returnViewContext.RouteData.Values["action"].ToString().Equals(action,StringComparison.OrdinalIgnoreCase);}返回假;}publicboolIsAction(stringaction,stringcontroller){returnIsController(controller)&&IsAction(action);}///我添加到UrlHelper类的一些扩展方法。publicstaticclassUrlHelperExtensions{//////确定当前视图是否等于指定的操作//////控制器的类型。///UrlHelper///要检查的操作。//////如果指定的动作是当前视图则为真;否则,假的。///publicstaticboolIsAction(thisUrlHelperhelper,LambdaExpressionaction)whereTController:Controller{MethodCallExpressioncall=action.BodyasMethodCallExpression;}if(call==null){thrownewArgumentException("表达式必须是方法调用","action");}return(call.Method.Name.Equals(helper.ViewContext.ViewName,StringComparison.OrdinalIgnoreCase)&&typeof(TController)==helper.ViewContext.Controller.GetType());}//////确定当前视图是否等于指定的操作//////UrlHelper///操作的名称。//////如果指定的动作是当前视图则为真;否则,假的。///publicstaticboolIsAction(thisUrlHelperhelper,stringactionName){if(String.IsNullOrEmpty(actionName)){thrownewArgumentException("请指定动作的名称","actionName");}stringcontrollerName=helper.ViewContext.RouteData.GetRequiredString("controller");返回IsAction(助手,actionName,controllerName);}//////确定当前视图是否等于指定的操作//////UrlHelper///操作的名称。///控制器的名称。//////如果指定的动作是当前视图则为真;否则,假的。///publicstaticboolIsAction(thisUrlHelperhelper,stringactionName,stringcontrollerName){if(String.IsNullOrEmpty(actionName)){thrownewArgumentException("请指定动作的名称","actionName");}if(String.IsNullOrEmpty(controllerName)){thrownewArgumentException("请指定控制器的名称","controllerName");}if(!controllerName.EndsWith("Controller",StringComparison.OrdinalIgnoreCase)){控制器名称=控制器名称+“控制器”;}boolisOnView=helper.ViewContext.ViewName.SafeEquals(actionName,StringComparison.OrdinalIgnoreCase);返回isOnView&&helper.ViewContext.Controller.GetType().Name.Equals(controllerName,StringComparison.OrdinalIgnoreCase);}//////判断当前请求是否在指定的控制器上//////助手。///控制器的名称。//////如果当前视图在指定的控制器上则为真;否则,假的。///publicstaticboolIsController(thisUrlHelperhelper,stringcontrollerName){if(String.IsNullOrEmpty(controllerName)){thrownewArgumentException("请指定控制器的名称","controllerName");}if(!controllerName.EndsWith("Controller",StringComparison.OrdinalIgnoreCase)){controllerName=controllerName+"Controller";}返回helper.ViewContext.Controller.GetType().Name.Equals(controllerName,StringComparison.OrdinalIgnoreCase);}//////判断当前请求是否在指定的控制器上//////控制器的类型。///帮手。//////如果当前视图在指定的控制器上则为真;否则,假的。//publicstaticboolIsController(thisUrlHelperhelper)whereTController:Controller{return(typeof(TController)==helper.ViewContext.Controller.GetType());您可以使用母版页中的构建URL是否突出显示当前页面的选项卡或其他内容?如果是这样,您可以使用视图中的ViewContext并获取所需的值。我写了一个帮助程序类,允许我访问路由参数。使用这个助手,你可以获得控制器、动作和传递给动作的所有参数。以上是C#学习教程:Asp.NetMVC:HowtogetthevirtualURLofthecurrentcontroller/view?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: