Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何获取页面的ASP.NET MVC操作(即,从URL获取的操作)而不是当前操作?_Asp.net Mvc_Routes - Fatal编程技术网

Asp.net mvc 如何获取页面的ASP.NET MVC操作(即,从URL获取的操作)而不是当前操作?

Asp.net mvc 如何获取页面的ASP.NET MVC操作(即,从URL获取的操作)而不是当前操作?,asp.net-mvc,routes,Asp.net Mvc,Routes,给定以下简化的ASP.NET MVC场景: 用户导航到一个页面(“为清晰起见,明确包含索引”) 该页面上有一个调用Home controller中的方法的$.ajax({..})jQuery帖子,例如/Home/GetProducts 在GetProducts()方法中,我需要获取索引操作名称-请记住,在运行时,我不知道用户是否正在浏览Home/Index、Home/About、Home/Contact,因为GetProducts可以从任何地方调用 我一生都无法在GetProducts()方法的

给定以下简化的ASP.NET MVC场景:

  • 用户导航到一个页面(“为清晰起见,明确包含索引”)
  • 该页面上有一个调用Home controller中的方法的
    $.ajax({..}
    )jQuery帖子,例如
    /Home/GetProducts
  • GetProducts()
    方法中,我需要获取索引操作名称-请记住,在运行时,我不知道用户是否正在浏览
    Home/Index
    Home/About
    Home/Contact
    ,因为
    GetProducts
    可以从任何地方调用
  • 我一生都无法在
    GetProducts()
    方法的范围内获得页面操作(例如,索引、关于、联系等)

    我尝试了以下方法:

    // returns "GetProducts"
    string actionName1 = RouteData.GetRequiredString("action");
    // returns "GetProducts"
    string actionName2 = ControllerContext.Controller.ValueProvider.GetValue("action").RawValue.ToString();
    // ParentActionViewContext == null
    string actionName3 = ControllerContext.ParentActionViewContext.RouteData.Values["action"].ToString();
    

    你不可能得到它。HTTP是一种无状态协议,它不跟踪以前的请求。因此,只需将其作为参数传递给AJAX请求:

    $.ajax({
        url: '@Url.Action("GetProducts", "Home")',
        data: { currentAction: '@ViewContext.RouteData.GetRequiredString("action")' },
        success: function(result) {
            // do something with the results
        }
    });
    
    您的
    GetProducts
    控制器操作将把它作为参数:

    public ActionResult GetProducts(string currentAction)
    {
        ...
    }
    

    注意:我可以从调用视图中传入操作名称,但我不想这样做。对不起,没有其他方法,由于HTTP协议的无状态性质,您必须这样做。