gpt4 book ai didi

model-view-controller - MVC : pass model/model data to a view from a controller?

转载 作者:行者123 更新时间:2023-12-04 00:15:07 27 4
gpt4 key购买 nike

如果 View 需要访问模型中的数据,您是否认为 Controller 应:

a)将模型传递给 View
b)将模型的数据传递给 View
c)都不;这不应该是 Controller 所关心的。让 View 直接访问模型以检索数据。仅让 Controller 提供 View 所需的一些参数,以过滤模型中的数据。
d)视情况而定。
e)以上都不是,但是[...]

谢谢

在对用户删除的答案的评论中进行一些辩论之后,可能需要对此进行澄清。我对MVC架构的看法偏向于Zend Framework(php)的看法,在Zend Framework中,默认情况下, Controller 中的操作已为其分配了默认 View 。因此,不是哪个模型决定了哪个 View 是合适的,而是 Controller 。您是否认为模型应该决定哪种观点合适?我认为适合让 View 基于模型构建的唯一方法是让 Controller 将模型传递给 View 。还有其他技术可以让 View 访问模型而无需涉及 Controller 吗?还是让 Controller 将模型传递给 View ,这样就可以基于模型属性来构建 View ,这是完美的选择吗?

最佳答案

e)以上都不是;传递 View 优化的“ViewModel”。

ASP.NET MVC中的示例:-

public ActionResult Details(int id)
{
Product p = ProductService.GetProductById(id);

if(p == null) { return RedirectToAction("Index"); }

ProductViewModel model = new ProductViewModel(p);
return View(model);
}

a)和b)都将遵守d)。永远不会c)。

通常,ViewModel只是封装了Model(如果没有复杂的事情发生,您的 View 可以直接通过ProductViewModel.Product访问模型)。但是,如果 View 需要对模型做任何复杂的事情,那么ViewModel的责任就是这样做,而不是Controller或View的责任。

这样可以使您的关注点保持良好和隔离状态。您的 Controller 并不关心您的View需要什么特定数据(除了它正在渲染产品的某些详细信息之外),也不特别是您的View需要该数据以什么格式显示。您的View并不依赖于您的实现细节模型。您的模型不必担心如何查看。如果您有两个View呈现产品(例如,Create,Edit,Summary,MoreDetails等),则这些View可以具有不同的ViewModels以仅公开每个特定View所需的数据,因此您的View不会彼此依赖。迷人的 :)

从不同的角度看一些进一步的读物:

http://www.thoughtclusters.com/2007/12/datamodel-and-viewmodel/

http://stephenwalther.com/blog/archive/2009/04/13/asp.net-mvc-tip-50-ndash-create-view-models.aspx

http://www.nikhilk.net/Silverlight-ViewModel-MVC.aspx

我认为ViewModels是一个特别的.NET东西,但是我完全没有理由为什么不能在PHP中使用该模式。

希望这可以帮助。

关于model-view-controller - MVC : pass model/model data to a view from a controller?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1371119/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com