我正在与一个在其授权动作过滤器中设置变量(例如当前用户配置文件对象)的项目一起工作,并将其存储在ViewData中,以通过以下动作方法进行访问。

然后,该操作方法从存储库中调用功能。我试图找到一种从存储库中访问ViewData的方法,而无需修改存储库的方法签名,并且希望有一种方法可以通过可从存储库中调用的HttpContext.Current功能进行追溯。

有人能帮忙吗?为了清楚起见,我唯一可以修改的代码是在存储库方法中:(

public class MyController : Controller {
    [MyAuthorize]                   // ViewData items are set here
    public void MyAction(int id)
    {
        new MyRepository().DoSomething(id); // Need to access ViewData items within this repository method and am unable to alter the method signature :(
    }
}

最佳答案

我很确定答案是否定的。

当您查看ASP.NET MVC源代码时, ControllerBase 在首次使用时会实例化ViewData字典。然后,当您调用View()时,将使用ViewResult字典作为参数实例化一个新的ControllerBase.ViewData。它看起来像没有应用于 public 静态属性或可从存储库内部访问的类HttpContext一样。

我认为您最好的选择是使用针对此类通信而构建的 HttpContext.Items 。尽管可能不如修改存储库以接受额外数据那样理想。

关于asp.net-mvc - 我可以从HttpContext访问ViewData吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24184635/

10-12 21:13