asp.net-mvc - MVC 中的局部 View

标签 asp.net-mvc partial-views

我是 MVC 的新手,刚刚遇到一个需要帮助的场景。

我将简要概述我的场景,就好像它是我更熟悉的 Web 窗体应用程序一样。

设想:

我有一个主页,其中列出了最近的 10 篇博客文章,以及一个“存档树”(按时间顺序列出了年/月,并附有指向这些年/月中创建的每个博客条目的链接)。

我将此“存档树”创建为用户控件,并在我的主页上输出该用户控件。

我还在我的主博客页面的一侧输出了这个存档树用户控件 - 博客页面仅呈现单个博客文章的详细信息。

我还想在我的 Web 应用程序的其他几个页面中重复使用此存档树控件。

MVC:

我有一个“PhotoController” Controller ,它有一个 ActionResult 方法,负责获取所选照片博客文章 (id) 的详细信息。

我想在我的照片博客页面上包含一个局部 View (存档树,它将呈现多条记录),它将遍历多条照片记录(List<Photo>)。

我可以创建一个 View 模型,它包含一个“照片”属性(用于呈现单个照片博客记录详细信息)和一个名为“PhotoArchive”的第二个属性,它是 List<Photo>。 .

不过,我对这种方法的担忧是,当我在站点的其他一些部分上重新使用这个“存档树”部分 View 时,我不一定想要通过同一个 View 模型(包含'Photo' 和 'PhotoArchive' 对象)到父 View 。例如,我的主页不需要通过“照片”对象传递给呈现主页的 View ,但我仍然想在主页的其余 HTML 中输出我的“存档树”部分 View 。

我期待有一个简单的解决方案,我现在只是不知道对 MVC 如此陌生。

最佳答案

有几种方法可以实现这一点:

您可以使用 Html.RenderAction() http://www.asp.net/mvc/videos/aspnet-mvc-2-render-action

或者您可以使用不同的 View 模型

class HomePageViewModel {
  IEnumerable<Blog> PhotoArchive { get; set; }
}
class BlogPageViewModel {
  IEnumerable<Blog> PhotoArchive { get; set; }
  Blog Photo { get; set; }
}

并在调用 Html.RenderPartial("view", model.PhotoArchive) 时传递 PhotoArchive 属性

或者你可以使用和接口(interface)
interface IMyViewPage {
  IEnumerable<Blog> PhotoArchive { get; set; }
}
class MyViewModel : IMyViewPage{
  //...
  Blog PhotoBlog { get; set; }
}

Model.RenderPartial("view", model)

关于asp.net-mvc - MVC 中的局部 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4225199/

相关文章:

asp.net-mvc - 条件隐藏输入属性

c# - MVC 代码查看 Controller 是否仍在使用中

asp.net-mvc - 无法加载文件或程序集 HRESULT : 0x80131515 (When adding controller to MVC project that has assembly references on network drive)

c# - Ajax 调用 Web API 方法

javascript - MVC 3 和 PartialViews,脚本不可见?

asp.net-mvc - 从 View 访问POST值

asp.net-mvc - 使用 Ajax.ActionLink 加载时,ASP.Net MVC 在 PartialView 中运行 JavaScript

c# - 带列表的 ASP.NET MVC PartialView

c# - 在 JavaScript 中使用类名访问 html 元素

c# - Umbraco mvc,渲染部分 View 无法解析为类型