ASP.NET MVC:部分知道它是否从另一个页面带来请求?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET MVC:部分知道它是否从另一个页面带来请求?相关的知识,希望对你有一定的参考价值。
我有一个局部视图,可以通过Action(下图中的Action2)请求,也可以在另一个页面中使用“html.Action()”(下图中的Action1)进行渲染。从部分(或部分控制器)内部有一种方法可以确定这两种方法中的哪一种用于呈现页面?
答案
如果你无法访问ControllerContext.IsChildAction,你可以使用DataTokens
或检查"ParentActionViewContext"
是否有关键ControllerContext
的东西。
另一答案
你应该能够从中得到它
HttpContext.Current.Request.RawUrl
另一答案
应该注意的是,在MVC中做这种事情并不是特别好的做法。部分不应该关注它的“父母”......但如果你确实需要这样做,无论出于什么原因......
您可以在局部视图的控制器中使用此代码来确定它是直接加载还是包含在另一个页面中。
// this is the route which was originally used to route the request
string req_controller = Request.RequestContext.RouteData.Values["controller"].ToString();
string req_action = Request.RequestContext.RouteData.Values["action"].ToString();
// this is the route which was used to route to this action/view
string this_controller = RouteData.Values["controller"].ToString();
string this_action = RouteData.Values["action"].ToString();
if (req_controller == this_controller && req_action == this_action)
{
// this partial was loaded directly
}
else
{
// this partial was loaded indirectly
}
另一答案
我想知道这个的原因是我希望能够根据它是从控制器动作还是从另一个页面内部渲染来切换部分视图的Layout
。
即。
return PartialView("MyView.cshtml");
会导致布局与必要的菜单栏和其他网站装饰。
和
@Html.Partial("MyView")
只是嵌入内容而不添加页面的其余部分。
所以,在我的页面默认布局中我有:
@if (this.IsPartial()) {
Layout = null;
} else {
Layout = "_SiteLayout";
}
@RenderBody()
这是我发现的:
public static bool IsPartialResult(this WebPageBase @this)
{
return !@this.OutputStack.Any(writer => writer is HttpWriter);
}
它可能不适用于所有情况。但它对我有用。因人而异/ HTH
另一答案
不,没有办法,部分不应该知道它。
以上是关于ASP.NET MVC:部分知道它是否从另一个页面带来请求?的主要内容,如果未能解决你的问题,请参考以下文章
在 Web API 中启用了 Asp.Net MVC CORS,但不再发送标头