繁体   English   中英

如何处理控制器和ASP.NET MVC中的视图之间的共享数据?

[英]How to handle shared data between the controller and the view in ASP.NET MVC?

我们有一个模型(例如List<string> )。 生成列表的函数是不确定的,在请求的生存期内,需要在控制器和视图中引用输出。 由于是每个请求,因此不能是静态或单例。

这是一个通用的结构,可以从任何视图或控制器中引用。

由于我们不能从视图访问控制器(原则上,我们同意),因此我们无法将其保留在控制器中。 当前,我们将其保留在ViewData字典中,并在控制器或视图中初始化它(如果控制器不需要它)。

我们认为,为此目的使用ViewData可能不是理想的选择,因为它最初并不是由控制器使用的。 有没有更好的方法在Controller和View之间共享通用的按请求数据? 如果没有,我们将坚持使用ViewData

HttpContext.Items字典,但是我不确定它是否适合此目的。

在请求的生存期内,需要在控制器和视图中都引用输出

MVC的工作方式,执行Controller中的Action代码,然后将结果数据传递到视图引擎,该视图引擎使用您通过调用View(data)或在ViewData字典中传递的信息来绘制页面。

我不知道您要尝试做什么,但是听起来这似乎是技术上的问题而不是技术上的问题(不过,我可能错了)。

您能解释一下为什么在渲染视图时需要控制器吗? 如果您需要与列表相关联的任何逻辑(以对其进行处理或执行任何操作),我将创建一个扩展List <T>的新类,将逻辑添加到该类而不是控制器,并传递该对象使用View()或ViewData []将类添加到View。

始终应将控制器操作称为第一。 如果有多个控制器调用同一个视图/局部视图,则应将代码重构为一个方法并调用该方法。

ViewData是执行此操作的解决方案,如果您确实想要“一次访问”类型信息,则可能是TempData,但ViewData是为此目的而设计的。

您要执行的确切操作是什么?

似乎您只是在询问将某些数据从Controller传递到View的方法,这是一件微不足道的任务。 只需在MVC3情况下使用ViewData(是)或ViewBag或使用ViewModels。

还是有些特殊情况? “从Controller和View引用”是什么意思? 数据来自哪里? 通常情况是Controller为View准备数据,并将其作为ActionResult(或者更好的是作为ViewModel)传递。 View绝不应绕过控制器自行获取一些数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM