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

我有一个即将发生的事件的列表,这些事件需要在我的网站的多个页面上显示。因此,我在Views \ Shared文件夹中放置了一个新的ViewUserControl(ListEvents.ascx)。

我要求将此ListEvents.ascx呈现在我的“主页/索引”视图上,如下所示:

<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应该始终从其所在的View接收其模型。解决此问题的方法(例如,将代码隐藏文件添加到viewusercontrol中)将破坏MVC模式。

最佳答案

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

foreach (var post in Model.Entries) {
  Html.RenderPartial("PostTemplate", post);
}

关于c# - 带有使用MVC 1.0的 Controller 的ASP.Net MVC ViewUserControl,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/714939/

10-13 00:00