ASP.NET MVC – 来自控制器代码的当前动作?
这与最近的另一个问题非常相似:
如何在ASP.NET MVC视图中返回当前操作?
但是,我想从控制器代码中获取当前操作的名称。
因此,在Action调用的函数代码中,我想获取当前Action名称的字符串。
这可能吗?
您可以从控制器类中访问路径数据,如下所示:
var actionName = ControllerContext.RouteData.GetRequiredString("action");
或者,如果“行动”不是您路线的必需部分,您可以按照惯例索引路线数据。
我能想到的唯一方法是使用StackFrame类。 如果您正在处理性能关键代码,我不会推荐它,但您可以使用它。 唯一的问题是,StackFrame为您提供了到目前为止所调用的所有方法,但是没有简单的方法可以确定哪些是Action方法,但是在您的情况下您可能知道Action将有多少层是。 这是一些示例代码:
[HandleError] public class HomeController : Controller { public void Index() { var x = ShowStackFrame(); Response.Write(x); } private string ShowStackFrame() { StringBuilder b = new StringBuilder(); StackTrace trace = new StackTrace(0); foreach (var frame in trace.GetFrames()) { var method = frame.GetMethod(); b.AppendLine(method.Name + "
"); foreach (var param in method.GetParameters()) { b.AppendLine(param.Name + "
"); } b.AppendLine("
"); } return b.ToString() ; } }
好吧,如果你在控制器中,你知道正在调用什么动作。 我猜你有一个在控制器中使用的类,它需要根据被调用的动作表现不同。 如果是这种情况,那么我会将操作的字符串表示传递给action方法中需要此信息的对象。 您的一些示例代码将真正阐明您需要做什么。 以下是我想的一些示例代码:
上述就是C#学习教程:ASP.NET MVC – 来自控制器代码的当前动作?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public ActionResult TestControllerAction() { var action = new TestControllerAction(); var objectWithBehaviorBasedOnAction = new MyObjectWithBehaviorBasedOnAction(); objectWithBehaviorBasedOnAction.DoSomething(action); } public class MyObjectWithBehaviorBasedOnAction: IMyBehaviorBasedOnAction { public void DoSomething(IControllerAction action) { // generic stuff } public void DoSomething(TestControllerAction action) { // do behavior A } public void DoSomething(OtherControllerAction action) { // do behavior b } } public interface IMyBehaviorBasedOnAction { void DoSomething(IControllerAction action); }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1025342.html