use*_*192 5 c# razor asp.net-core
我有一个 ASP.NET 应用程序。我的应用程序有一个 _ViewStart.cshtml 文件。该文件如下所示:
@using MyCompany.MyApp;
@{
Layout = "/Views/Shared/_Layout.cshtml";
var p = HttpContext.Current.Request.QueryString["parameter"];
ViewBag.QSParameter = p;
}
Run Code Online (Sandbox Code Playgroud)
当我执行此代码时,出现以下错误:
The name 'HttpContext' does not exist in the current context
Run Code Online (Sandbox Code Playgroud)
我不明白。_ViewStart.cshtml 不是视图的“外壳”吗?我试图弄清楚如何全局读取查询字符串参数并为每个请求在 ViewBag 上设置一个值。我认为这就是这样做的方法。
谢谢
您应该有权访问Request_ViewStart 文件。
尝试这个:
@using MyCompany.MyApp;
@{
Layout = "/Views/Shared/_Layout.cshtml";
var p = Request.QueryString["parameter"];
ViewBag.QSParameter = p;
}
Run Code Online (Sandbox Code Playgroud)
编辑:对于 ASP.NET 5
我的机器上没有 ASP.NET 5,但查看了该框架的源代码。看起来有一个Context属性RazorPage返回一个HttpContext. 或者,您可以HttpContext通过 访问ViewContext。见下文:
@{
Layout = "/Views/Shared/_Layout.cshtml";
var p = Context.Request.Query["parameter"];
// or this...
// var p = ViewContext.HttpContext.Request.Query["parameter"];
ViewBag.QSParameter = p;
}
Run Code Online (Sandbox Code Playgroud)
要从 检索它_ViewStart.cshtml,您可以使用:
ViewBag.QSParameter = Context.Request.Query["parameter"];
Run Code Online (Sandbox Code Playgroud)
注意:在 ASP.NET 5 中Query立即使用(超过QueryString)
但是,我可能会选择走不同的路线并利用IResultFilter:
public class QSParameterFilter : IResultFilter
{
public void OnResultExecuting(ResultExecutingContext context)
{
var QSParameter = context.HttpContext.Request.Query["parameter"];
((Controller)context.Controller).ViewBag.QSParameter = QSParameter;
}
public void OnResultExecuted(ResultExecutedContext context) { }
}
Run Code Online (Sandbox Code Playgroud)
然后,在 Startup.cs 中注册它:
services.AddMvc();
services.Configure<MvcOptions>(options => {
options.Filters.Add(new QSParameterFilter());
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5938 次 |
| 最近记录: |