Asp.net mvc 如何获取页面的ASP.NET MVC操作(即,从URL获取的操作)而不是当前操作?
给定以下简化的ASP.NET MVC场景: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()方法的
$.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协议的无状态性质,您必须这样做。