Asp.net mvc 我不能再将ViewData传递到MVC Core 1.0中的_Layout.cshtml吗?
我正在尝试将背景图像的URL传递给我的Asp.net mvc 我不能再将ViewData传递到MVC Core 1.0中的_Layout.cshtml吗?,asp.net-mvc,razor,asp.net-core,Asp.net Mvc,Razor,Asp.net Core,我正在尝试将背景图像的URL传递给我的\u Layout.cshtml public HomeController() { this.ViewData["BackgroundImage"] = "1920w/Stipula_fountain_pen.jpg"; } 及 ... 但是ViewData在\u Layout.cshtml中总是空的。这是否符合预期?我不想沿着BaseViewModel/BaseController的路线走下去,因为这感觉太过分了 编辑:似乎构造函数中设置的
\u Layout.cshtml
public HomeController()
{
this.ViewData["BackgroundImage"] = "1920w/Stipula_fountain_pen.jpg";
}
及
...
但是ViewData
在\u Layout.cshtml
中总是空的。这是否符合预期?我不想沿着BaseViewModel/BaseController
的路线走下去,因为这感觉太过分了
编辑:似乎构造函数中设置的
ViewData
没有实际使用,因为一旦某个操作执行,集合就为空。如果我在操作中设置了ViewData
,则该数据将传递到\u Layout.cshtml
-我觉得这是一个bug。您可以使用操作过滤器为所有控制器操作设置ViewData
:
public class SetBackgroundUrlAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var result = filterContext.Result as ViewResult;
if (result != null)
{
result.ViewData["BackgroundImage"] = "1920w/Stipula_fountain_pen.jpg";
}
}
}
[SetBackgroundUrl]
public HomeController()
{
}
或者只覆盖控制器的OnActionExecuted方法:
public override void OnActionExecuted(ActionExecutedContext context)
{
base.OnActionExecuted(context);
var result = context.Result as ViewResult;
if (result != null)
{
result.ViewData["BackgroundImage"] = "1920w/Stipula_fountain_pen.jpg";
}
}
我使用了这个filter属性展开了对的回答,它可以接受任意URL:
[AttributeUsage(AttributeTargets.Class|AttributeTargets.Method, AllowMultiple = false)]
public class SetBackgroundUrlAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
if (!string.IsNullOrWhiteSpace(this.Url))
{
var result = filterContext.Result as ViewResult;
if (result != null)
result.ViewData["BackgroundImage"] = this.Url;
}
}
public string Url { get; set; }
}
并且是这样使用的:
[SetBackgroundUrl(Url = "1920w/Stipula_fountain_pen.jpg")]
public class HomeController : Controller
{
...
}
[SetBackgroundUrl(Url = "1920w/Stipula_fountain_pen.jpg")]
public class HomeController : Controller
{
...
}