由于所有预览版本和一个正式版本中关于 mvc 的所有信息之间的混淆,我对如何处理 viewusercontrols 感到非常困惑。 所以一劳永逸地告诉我如何实现这个例子:
我有一个即将发生的事件列表,需要显示在我网站的多个页面上。因此,我在我的 Views\Shared 文件夹中放置了一个新的 ViewUserControl (ListEvents.ascx)。
我请求此 ListEvents.ascx 像这样呈现在我的主页/索引 View 上:
<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>
但这似乎不是一件很聪明的事情,从 View 内部创建一个新模型?!还是我在这里错了?我什至不能传递任何验证状态,因此不能传递 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/