在ASP.NET MVC Core控制器的构造函数中设置ViewBag属性
|
我的主题有某种面包屑.控制器始终是类别.为了避免重复我自己,我想在控制器的构造函数中为所有操作设置它,如下所示: class MyController:Controller{
public MyController() {
ViewBag.BreadcrumbCategory = "MyCategory";
}
}
当我在布局视图中访问ViewBag.BreadcrumbCategory时,它为null.在一个行动中它起作用: class MyController:Controller{
public IActionResult DoSomething() {
ViewBag.BreadcrumbCategory = "MyCategory";
}
}
我想知道在构造函数中设置ViewBag属性是不可能的?在执行此工作的每个操作上调用函数将是令人烦恼且没有好的做法.在another question使用构造函数是一个被接受的answear,但正如我所说这不起作用,至少对于ASP.NET Core. 解决方法关于它有一个 GitHub issue,据说这是设计的.您链接的答案是关于ASP.NET MVC3,旧的旧版ASP.NET堆栈.ASP.NET Core是从头开始编写的,它使用不同的概念,专为可移植性(多个平台)以及性能和现代实践而设计,例如内置支持依赖注入. 最后一个使得无法在构造函数中设置ViewBag,因为必须通过Property Injection注入Constructor基类的某些属性,因为您可能已经注意到您不必在派生控制器中传递这些依赖项. 这意味着,当调用Controller的构造函数时,不会设置HttpContext,ControllerContext等的属性.它们仅在调用构造函数后设置,并且存在对此对象的有效实例/引用. 正如GitHub问题所指出的那样,它不会被修复,因为这是设计的. 如您所见,ViewBag依赖于ViewData,并在初始化控制器后填充ViewData.如果你调用ViewBag.Something =“something”,那么你将创建一个DynamicViewData类的新实例,该实例将在构造函数初始化之后被替换. 正如@SLaks指出的那样,您可以使用为每个控制器配置的操作过滤器. 以下示例假定您始终从Controller基类派生控制器. public class BreadCrumbAttribute : IActionFilter
{
private readonly string _name;
public BreadCrumbAttribute(string name)
{
_name = name;
}
public void OnActionExecuting(ActionExecutingContext context)
{
base.OnActionExecuting(context);
var controller = context.Controller as Controller;
if (controller != null)
{
controller.ViewBag.BreadcrumbCategory = _name;
}
}
}
现在你应该能够用它来装饰你的控制器. [BreadCrumb("MyCategory")]
class MyController:Controller
{
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Asp.net mvc dataannotation MaxLength验证不起作用
- asp.net-mvc-4 – 如何在asp.net mvc应用程序中使用Gmail S
- asp.net-mvc – 有没有办法让RoutePrefix以可选参数开头?
- asp.net-mvc – 模型绑定不起作用
- ASP.NET MVC 3 ValidateRequest(false)不能使用FormCollect
- 我可以在.NET中设置IIS MIME类型吗?
- asp.net-mvc – 如何使用ASP.NET MVC实现自定义缓存提供程序
- asp.net – ApplicationInstance.CompleteRequest不会停止执
- asp-classic – 从用户检测空/空输入
- asp.net – 请求标头的大小太长
- asp.net – 在客户端启用/禁用RequiredValidator
- asp.net – SignalR/signalr/hubs 404未找到
- asp.net-mvc – 如何显示图像从路径在asp.net mv
- asp.net-mvc – 在FSharp.Core旁边找不到FSharp.
- asp.net-mvc – 返回json中的双引号
- asp.net-mvc-3 – 不再使用XXXX.现在用于检测模型
- asp.net-mvc-3 – 在MVC Razor View中使用If语句
- asp.net-mvc-3 – 造型ASP.NET MVC验证错误?
- asp.net-mvc – MVC4捆绑使用Scripts.Render时速
- asp.net-mvc-3 – 实体框架|代码优先|从CultureI
