据我所知,MVC 似乎对待部分视图不同于主要视图。似乎我可以访问主视图中的对象,但如果该对象将在主控制器操作返回后被释放(请参阅我的问题here),则不能访问它的子视图。
我认为这是为了在主控制器操作中的对象被处置很久之后,通过 AJAX 或其他方法促进这些部分视图的异步更新。这对我来说很有意义。
我现在尝试使用局部视图的方式,我不需要这种异步更新功能。我可以将部分视图全部剪切并放在一起,但我正在寻找的只是一种将我的视图分割成更小的块的方法,而不是将它们全部放在一个大文件中。
理想情况下,我希望能够将一个对象从我的控制器传递到我的视图,在视图和任何子/子视图中使用该对象,并且仅在视图及其子/子视图完成后处理该对象使用它。
编辑 - 添加一个例子
我在单个文件中有一个大复杂视图。想象一下,每一行实际上是一个更大、更复杂的视图标记和代码块:
ViewStuff.cshtml
ViewStuff
ViewStuff
MoreViewStuff
MoreViewStuff
MoreViewStuff
ViewStuff
EvenMoreViewStuff
EvenMoreViewStuff
EvenMoreViewStuff
ViewStuff
为了方便和维护,我想将此视图分解为一些单独的文件,有效地将其部分提取到子视图中,例如“提取方法”重构之类的:
ViewStuff.cshtml
ViewStuff
ViewStuff
RenderPartialViewOf MoreViewStuff
ViewStuff
RenderPartialViewOf EvenMoreViewStuff
ViewStuff
MoreViewStuff.cshtml
MoreViewStuff
MoreViewStuff
MoreViewStuff
EvenMoreViewStuff.cshtml
EvenMoreViewStuff
EvenMoreViewStuff
EvenMoreViewStuff
据我所知,局部视图似乎是这个问题的答案,尽管似乎有很多方法可以使用。我遇到的问题是我的控制器正在将一个对象传递给控制器操作返回时释放的视图。
在“all in one file”场景下,我可以成功地利用对象构建完整视图,因为整个视图是在方法返回和对象被释放之前构建的。但是,这并不理想,因为这意味着大型、长、单一的视图文件以及以后可能出现的部分重复。
在“多个文件”场景中,主视图可以正常访问对象,因为它还没有被释放。但是主控制器操作方法在部分视图获得对象之前返回,处理对象。结果是局部视图中出现错误,正在寻找不再可用的对象。
我想要的是一种在控制器方法处理我的对象之前构建由多个有组织的块组成的完整视图的方法。
再次,请参阅我的另一个问题,了解有关我正在使用该对象做什么、它在控制器中的 using 语句等的更具体的代码。