0

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

  1. 用户导航到页面http://www.mysite.com/Home/Index (为清楚起见,明确包含“索引”)
  2. 在那个页面上是一个$.ajax({..}) jQuery 帖子,它调用 Home 控制器中的一个方法,例如/Home/GetProducts
  3. 在该GetProducts()方法中,我需要获取 Index 操作名称 - 请记住,在运行时我不知道用户是否正在浏览Home/IndexHome/AboutHome/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();
4

1 回答 1

1

你不能得到它。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)
{
    ...
}
于 2013-08-23T14:23:31.167 回答