4

由于所有预览版本和一个官方版本中关于 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 模式。

4

1 回答 1

2

默认情况下,将使用与页面相同的模型。如果您想为 的每个实例提供一个模型RenderPartial,您的情况可能就像在博客应用程序中呈现多个条目一样。您可以从页面模型中的集合中获取每个模型并将其传递给用户控件,如下所示:

foreach (var post in Model.Entries) {
  Html.RenderPartial("PostTemplate", post);
}
于 2009-04-03T17:53:26.643 回答