Asp.net MVC 5-创建可以在控制器和视图中访问的属性

问题描述 投票:0回答:1

我正在创建一个可以在Controller和View中访问的属性。

public abstract class BaseWebViewPage : WebViewPage
{
    public Application Application { get; set; }

    public override void Execute()
    {
        Application = new Application(Context.GetCurrentFoo());
    }
}

public abstract class BaseWebViewPage<TModel> : WebViewPage<TModel>
{
    public virtual Application Application { get; set; }

    public override void Execute()
    {
        Application = new Application(Context.GetCurrentFoo());
    }
}

并在控制器中进行设置

public abstract class BaseController : Controller
{
    protected virtual IApplication Application { get; private set; }

    public Institution CurrentFoo
    {
        get { return HttpContext.GetCurrentFoo(); }
        set { HttpContext.SetCurrentFoo(value); }
    }

    protected override void Initialize(RequestContext requestContext)
    {
        base.Initialize(requestContext);

        Application = new Application(CurrentFoo);
    }
}

并尝试在视图中使用它

@{
    var App = Application;
}

但是得到一个空值。我也在WebViewPage的InitHelpers方法和Execute方法中尝试过此方法。 InitHelpers似乎正常工作,但是Context.CurrentFoo没有数据,并且总是在有HtmlHelpers时执行,因为我不想在发生这种情况,因为它会调用数据。

c# .net asp.net-mvc
1个回答
0
投票

我认为您使用了错误的内容。在MVC概念中,您不能在视图中使用controller属性,因为controller在视图上方。如果要在视图中使用控制器属性值,则需要将其传递给变量

在您的控制器中,例如

View.Data["Application"] = new Application(CurrentFoo);

并且在您看来

@{
    var App = View.Data["Application"] as Application;
}

或View.Bag或依赖项注入。

© www.soinside.com 2019 - 2024. All rights reserved.