C# ASP.Net MVC ViewUserControl与使用MVC 1.0的控制器

C# ASP.Net MVC ViewUserControl与使用MVC 1.0的控制器,c#,asp.net-mvc,viewusercontrol,C#,Asp.net Mvc,Viewusercontrol,由于所有预览版本和官方版本中关于mvc的所有信息之间的混淆,我非常困惑如何处理viewusercontrols。 因此,请一劳永逸地告诉我如何实现此示例: 我有一个即将举行的活动列表,需要在我的网站的几个页面上显示。因此,我在Views\Shared文件夹中放置了一个新的ViewUserControl(ListEvents.ascx) 我请求此ListEvents.ascx在我的主视图/索引视图上呈现如下: <p> Here's a list of events: &

由于所有预览版本和官方版本中关于mvc的所有信息之间的混淆,我非常困惑如何处理viewusercontrols。 因此,请一劳永逸地告诉我如何实现此示例:

我有一个即将举行的活动列表,需要在我的网站的几个页面上显示。因此,我在Views\Shared文件夹中放置了一个新的ViewUserControl(ListEvents.ascx)

我请求此ListEvents.ascx在我的主视图/索引视图上呈现如下:

<p>
    Here's a list of events:
    <% Html.RenderPartial("ListEvents");%>
</p>
foreach (var post in Model.Entries) {
  Html.RenderPartial("PostTemplate", post);
}

以下是活动列表:

如何将模型传递给此viewusercontrol?我知道我能做到:

<p>
    Here's a list of events:
    <% Html.RenderPartial("ListEvents", (new Model.Services.EventService(null)).ListEvents());%>
</p>

以下是活动列表:

但这似乎不是一件非常明智的事情,从视图内部创建一个新模型?!还是我错了?我甚至不能传递任何validationstate,因此使用null参数。 因此,另一种选择是将此数据存储到ViewData[]成员中,但我的viewusercontrol不应该依赖于其父级的ViewData

我相信有一个非常简单的答案,请分享,因为我已经完成了这个问题的网页浏览

谢谢

简单回答
viewusercontrol应始终从其所在的视图接收其模型。解决这个问题,比如向viewusercontrol添加代码隐藏文件,将打破MVC模式。

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

<p>
    Here's a list of events:
    <% Html.RenderPartial("ListEvents");%>
</p>
foreach (var post in Model.Entries) {
  Html.RenderPartial("PostTemplate", post);
}

是的,但是我的viewusercontrol的模型仍然依赖于它所在页面的模型。这正是我想要避免的。它们实际上依赖于模型的单个属性,而不是模型本身。两个完全不同的模型可能具有相同的属性。因此,每次我需要在视图中实现viewusercontrol时,我都需要确保该视图的控制器将视图的模型附加到viewusercontrol使用的模型?当然。基本上,它应该已经以某种方式做到了。控制器应该已经传递了显示视图所需的数据。你只是给它一个结构,便于将一个部分封装在一个单独的控件中。我明白了,谢谢你的清楚解释。我假设这是MVC模式的一部分,您不能有一个viewusercontrol作为一个独立的岛,使用它自己的适配器?