c# - 带有使用 MVC 1.0 的 Controller 的 ASP.Net MVC ViewUserControl

标签 c# asp.net-mvc viewusercontrol

由于所有预览版本和一个正式版本中关于 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/

相关文章:

c# - 如何在 MVC4 StyleBundle 中引用 *.min.css 文件?

asp.net-mvc - window.location.href 发送多个参数 asp.net mvc

asp.net-mvc - 用于 ASP.NET 的恶意爬虫拦截器

asp.net mvc - View 和 Controller

c# - 通过接口(interface)调用对象的方法时的内存利用率?

c# - 如何将扩展方法应用于数据行列?

c# - ASP.NET MVC2 访问控制 : How to do authorization dynamically?

c# - 为什么在尝试将 double 转换为 float 时出现错误?