由于所有预览版本和一个官方版本中关于 mvc 的所有信息之间存在混淆,我非常困惑如何处理 viewusercontrols。所以一劳永逸地告诉我如何实现这个例子:
我有一个即将发生的事件列表,需要在我网站的多个页面上显示。因此,我在 Views\Shared 文件夹中放置了一个新的 ViewUserControl (ListEvents.ascx)。
我请求这个 ListEvents.ascx 在我的 Home/Index 视图上呈现,如下所示:
<p>
Here's a list of events:
<% Html.RenderPartial("ListEvents");%>
</p>
我将如何将我的模型传递给这个 viewusercontrol?我知道我可以这样做:
<p>
Here's a list of events:
<% Html.RenderPartial("ListEvents", (new Model.Services.EventService(null)).ListEvents());%>
</p>
但这似乎不是一件很聪明的事情,从视图内部创建一个新模型?!还是我在这里错了?我什至不能通过任何验证状态,因此是 null 参数。因此,另一种选择是将这些数据存储到 ViewData[] 成员中,但我的 viewusercontrol 不应该依赖于它的父级的 ViewData!
我确信有一个非常简单的答案,请在我浏览完这个问题的网页后分享。
谢谢!
简单的答案:viewusercontrol 应该总是从它所在的视图中接收它的模型。解决这个问题,比如向 viewusercontrol 添加代码隐藏文件,会破坏 MVC 模式。