我正在与一个在其授权动作过滤器中设置变量(例如当前用户配置文件对象)的项目一起工作,并将其存储在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/