繁体   English   中英

如果模型不相关,则在MVC视图中发送多个模型

[英]send more than one model in MVC view if models are not related

如何从Controller向视图发送多个模型?

这似乎是一个被问过很多次的问题,但对于像我这样的再见者来说,仍然没有很好的答案(我没有找到)。

我发现的一种解决方案是创建一些“父”模型并返回“父”子模型的集合。 我不想创建任何父模型,因为我的两个模型都不相关。

例如,我有两个彼此之间没有关系的模型,它们是单独的模型,例如PersonModelHardwareModel 我有两个PersonModel视图,一个需要PersonModel ,另一个需要HardwareModel

我有HomeController返回视图。 此视图显示两个局部视图。 所以我需要将PersonModel发送到_PersonPartialView 而且我需要将HardwareModel发送到_HardwarePartialView

这个怎么做?

我相信应该有一个选项可以将不相关的模型的集合发送到View,但是究竟如何呢?

编辑:某些地方:我们有一个复杂的决定,基于那些我们只显示一个或两个局部视图的决定。 您可以像仪表板一样思考。 用户可以看到一个或多个“ dashobard”之类的面板。 因此它们甚至可能彼此无关。 因此,由于我们有两个以上的不同模型和不同的局部视图,因此实际情况更加复杂。 也许我应该有完全不同的方法。

如果HomeView同时需要PersonModel和HardwareModel,则将两者结合在一起就是您的模型。 所以创建例如

class HomeModel
{
    PersonModel person;
    HardwareModel hardware;
}

你有你的模型。

更新资料

根据问题的更新,如果您有一个类似于仪表板的页面,那么一种选择是取消当前的主视图。 具有框架视图,该视图定义面板位置,但不定义面板内容。 然后使用AJAX调用请求局部视图以填充面板。 这样,每个局部视图都有自己的模型,彼此分开,并且避免了一个视图需要了解可能最终托管的所有局部视图的所有模型。

最后,我们将抽象数据作为视图的一部分,但不一定将每个模型(例如,文化)的一部分放入ViewData / ViewBag中。 您仍然可以通过提供扩展方法来通过其他类封装视图包,从而以强类型方式访问它们。 我建议将HardwareModel内容放入其中,因为听起来这并不是您网页上的主要内容

public static HardwareSettings GetHardwareSettings (this HtmlHelper html)
{
  // simplified; add lazy instantiation...
  return (HardwareSettings) html.ViewData["hardware"];
}

这肯定是您能做的最好的。 如果这不适合您的问题,我建议您重新考虑您的体系结构,因为它可能存在某些缺陷。

如果未链接此模型,则不应从单个控制器方法返回它们。 如果应该显示在一页上,则可以使用ajax操作加载此局部视图

示例之一,如何执行此点击

暂无
暂无

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

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