我使用以下代码在我的视图中获取当前的“操作”,因为我想基于它自定义构建actionlink。
ViewContext.RequestContext.RouteData.Values("action")
我的最终目标是使用Javascript构建一些操作链接,而.js需要知道当前控制器和操作是什么,因为我希望它具有灵活性。我通过浏览框架找到了上述内容,但我不知道我是否找到了正确的东西。
即
var routeData = ViewContext.RequestContext.RouteData;
var linkStub = '/@routeData.Values("controller")/@routeData.Values("action")';
有谁知道这是否是最简单/最直接的方式?
答案 0 :(得分:27)
最干净的方式是扩展方法
public static class MyUrlHelper
{
public static string CurrentAction(this UrlHelper urlHelper)
{
var routeValueDictionary = urlHelper.RequestContext.RouteData.Values;
// in case using virtual dirctory
var rootUrl = urlHelper.Content("~/");
return string.Format("{0}{1}/{2}/", rootUrl, routeValueDictionary["controller"], routeValueDictionary["action"]);
}
}
答案 1 :(得分:13)
你可以从RequestContext
获得路线数据,但实际上并不重要(有多种方式)。我不担心经历多个对象(可能只需要几微秒)。您可以通过创建扩展方法(例如url helper)或使有问题的控件继承WebViewPage
的自定义实现(您可以在其中创建所需的快捷方式)来使代码更好。像那样:
public abstract class MyWebViewPage<TModel> : WebViewPage<TModel>
{
public string ControllerName
{
get
{
return Url.RequestContext.RouteData.Values["controller"].ToString();
}
}
public string ActionName
{
get
{
return Url.RequestContext.RouteData.Values["action"].ToString();
}
}
}