我们有一个模型(比如,List<string>
)。构建列表的函数是非确定性的,并且在请求的生命周期内需要在控制器和视图中引用输出。由于它是按请求,因此不能是静态或单独的。
这是一个常见的结构,可以从任何视图或控制器中引用。
由于我们无法从视图中访问控制器(原则上,我们同意),因此我们无法将其保留在控制器中。我们目前将它保存在ViewData
字典中并在控制器或视图中初始化(如果控制器不需要它)。
我们认为为此目的使用ViewData
可能并不理想,因为它不会被创建为首先由控制器使用。有没有更好的方法在Controller和View之间共享每个请求的公共数据?如果不是,我们会坚持使用ViewData
。
有HttpContext.Items
字典,但我不确定它是否适合此目的。
答案 0 :(得分:1)
在请求的生命周期内,需要在控制器和视图中引用输出
MVC的工作方式,执行Controller中的Action代码,并将结果数据传递给视图引擎,该引擎使用您通过调用View(数据)或ViewData字典传递的信息来绘制页面
我不知道你想要做什么,但听起来这更像是一种不好的方法而不是技术问题(不过我可能错了)。
你能解释为什么在渲染视图时你需要控制器吗?如果你需要任何与List关联的逻辑(处理它或用它做任何事情),我只需创建一个扩展List&lt; T&gt;的新类,将逻辑添加到该类而不是控制器,并传递一个对象使用View()或ViewData []。
将视图添加到视图中答案 1 :(得分:0)
应始终首先调用控制器操作。如果您有多个控制器调用相同的视图/局部视图,那么您应该将代码重构为一个方法并调用它。
ViewData是执行此操作的解决方案,如果您真的想要“一次访问”类型信息,那么可能是TempData,但ViewData就是为此设计的。
答案 2 :(得分:0)
你要做的确切事情是什么?
好像你只是问一下将一些数据从Controller传递到View的方法,这是一项相当简单的任务。只需在MVC3案例中使用ViewData,yes或ViewBag,或使用ViewModels。
还是有些特殊情况? “从Controller和View中引用”是什么意思?数据来自哪里?通常情况是Controller为View准备数据并将其作为ActionResult(或更好,作为ViewModel)传递。 View永远不应绕过控制器自行获取一些数据。