为了我们的web应用程序,我需要根据视图-或者更准确地说是生成视图的控制器和操作(以及用户id,但这不是重点)来保存获取和显示项的顺序。
我想,与其在每个控制器动作中自己提供一个标识符(以便用于某些视图相关的数据库输出排序),不如自动从调用它的控制器和动作方法中创建此标识符,这样更安全、更容易实现。
如何在控制器的操作方法内获取控制器和操作的名称?或者需要反射吗?
为了我们的web应用程序,我需要根据视图-或者更准确地说是生成视图的控制器和操作(以及用户id,但这不是重点)来保存获取和显示项的顺序。
我想,与其在每个控制器动作中自己提供一个标识符(以便用于某些视图相关的数据库输出排序),不如自动从调用它的控制器和动作方法中创建此标识符,这样更安全、更容易实现。
如何在控制器的操作方法内获取控制器和操作的名称?或者需要反射吗?
ToString()
,可以使用以下方法。string actionName = ControllerContext.RouteData.GetRequiredString("action");
string controllerName = ControllerContext.RouteData.GetRequiredString("controller");
public string Index(string controller,string action)
{
var names=string.Format("Controller : {0}, Action: {1}",controller,action);
return names;
}
或者您可以在模型中包含控制器和操作来获取两者和您的自定义数据。
public class DtoModel
{
public string Action { get; set; }
public string Controller { get; set; }
public string Name { get; set; }
}
public string Index(DtoModel baseModel)
{
var names=string.Format("Controller : {0}, Action: {1}",baseModel.Controller,baseModel.Action);
return names;
}
namespace Microsoft.AspNetCore.Mvc.Rendering
{
public static class HtmlRequestHelper
{
public static string Id(this IHtmlHelper htmlHelper)
{
var routeValues = htmlHelper.ViewContext.RouteData.Values;
if (routeValues.ContainsKey("id"))
return (string)routeValues["id"];
else if (htmlHelper.ViewContext.RouteData.Values["id"] != null)
return htmlHelper.ViewContext.RouteData.Values["id"].ToString();
return string.Empty;
}
public static string Controller(this IHtmlHelper htmlHelper)
{
var routeValues = htmlHelper.ViewContext.RouteData.Values;
if (routeValues.ContainsKey("controller"))
return (string)routeValues["controller"];
return string.Empty;
}
public static string Action(this IHtmlHelper htmlHelper)
{
var routeValues = htmlHelper.ViewContext.RouteData.Values;
if (routeValues.ContainsKey("action"))
return (string)routeValues["action"];
return string.Empty;
}
}
}
http://www.example.com/sites/site1/controllerA/actionB/
)。MVC提供了一堆API用于路由,所以为什么您需要再次解析URL? - T-motycontroller/action
。 - drzaus