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:部分知道它是否从另一个页面带来请求?的主要内容,如果未能解决你的问题,请参考以下文章

Asp.net mvc 问题将部分页面加载到引导模式中

在 Web API 中启用了 Asp.Net MVC CORS,但不再发送标头

asp.net MVC 数据库驱动的导航菜单

从另一个控件中的控件刷新 asp.net 页面

ASP.NET MVC 如何通过 Id 从另一个模型中获取名称

ASP.NET MVC 从另一个表中获取数据并链接在一起