65.9K
CodeProject 正在变化。 阅读更多。
Home

在 MVC 框架中使用部分视图

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.91/5 (16投票s)

2014 年 9 月 22 日

CPOL

4分钟阅读

viewsIcon

110535

downloadIcon

2950

在 Asp.net MVC 中使用部分视图

引言

随着 Web 应用程序的复杂性不断增长,我们必须决定何时创建新项以及何时尽可能地重用它们:)。这样做可以使应用程序保持尽可能简单和易于维护。因此,我们应该对 HTML 页面的布局和设计结构有基本的了解。

描述

例如,母版页(Web Farms)或布局(Asp.net MVC)提供了一种有用的方式来重用标记的一部分,并在多个页面中保持一致的外观和感觉。但有时会出现一种场景,可能需要更集中的方法来在多个位置显示一些高级信息,但并非全部。为了实现此功能,Asp.net MVC 框架提供了**部分视图**的解决方案,它允许我们将页面的一部分控件与整个页面分开,从而使我们能够在多个页面中放置一致的功能,而无需重写代码。

部分视图是包含有针对性的标记的视图,旨在作为大型视图的一部分进行渲染。它不指定任何布局。或者我们可以说,部分视图是 ASP.NET Web Forms 中的用户控件的 MVC 替代品。

详细了解

在本节中,我们将向您展示如何创建和使用部分视图,解释它们的工作原理,并演示可用于将视图数据传递到部分视图的技术。

我们可以创建两种部分视图

1. 空部分视图 - 创建部分视图时,如果未选择任何脚手架模板选项,则将创建一个空部分视图。

之后,如果我们要使用模型,可以像下面的语法一样附加它

@model ApplicationName.Models.ModelName

2. 强类型部分视图 - 创建部分视图时,如果我们在**模型类选项**中选择或输入了一个类型,则将创建一个强类型部分视图。现在创建了部分视图文件,其中仅包含 @model 标记来指定视图模型类型。然后,在渲染部分视图时,我们必须传递视图模型对象。

@model ApplicationName.Models.ModelName

使用 Razor 语法渲染部分视图

1. @Html.Partial ("PartialViewName", modelName)

2. @{ Html.RenderPartial("PartialViewName", modelName); }

在这两种情况下,第一个参数是部分视图的名称,第二个参数是模型名称(可选)。当未指定第二个参数时,它默认为调用 Html.Partial() 帮助程序的视图中的模型。

@Html.Partial() - 它生成 HTML 片段,而不是完整的 HTML 文档。Partial 帮助程序返回 MVCHtmlString 并将部分视图渲染为 HTML 编码的字符串。

@Html.RenderPartial- 与大多数其他帮助程序方法不同,它不返回 HTML 标记,而是直接将内容写入响应流,这就是为什么我们必须使用分号(;)将其作为完整的 C# 代码行调用。

两种方式都可以用来将部分视图作为视图的一部分进行渲染,唯一的区别在于性能。**RenderPartial** 比 **Partial** 更高效。

从控制器渲染部分视图

Controller.PartialView() - 它创建一个 **PartialViewResult** 对象,该对象渲染一个部分视图。PartialViewResult 仅渲染视图本身的标记,而不渲染视图可能指定的任何布局或母版页。由于部分页面不执行布局,因此您可能需要在部分视图中直接包含一些依赖项(如 CSS 或 Javascript),而不是将其包含在页面的布局中。

让我们演示一下

1. 创建一个演示 Web 项目来演示部分视图。文件 → 新建项目 → 选择 Asp.net MVC 框架,为您的项目命名并选择位置。

并选择项目模板和 Razor 作为视图引擎

项目结构如下:

2. 在控制器文件夹中创建 Home 控制器,请遵循下面的截图。

并使用空的 MVC 控制器模板创建 HomeController。

并在 home 控制器中写入以下代码

        public ActionResult Index()
        {
            var model = new Company();
            model.Department = GetDepartmentList();
            return View(model);
        }
		
        public List<department> GetDepartmentList()
        {
            var model = new List<department>();
            for (var count = 1; count <= 5; count++)
            {
                var data = new Department();
                data.DepartmentName = "IT " + count;
                data.DepartmentRule = "Rule " + count;
                data.AdminComment = "Admin omment " + count;
                model.Add(data);
            }
            return model;
        }

        public PartialViewResult ShowPartailView()
        {
            return PartialView("_MyView");
        }

3. 创建模型类 -> 右键单击模型文件夹并选择添加 -> 选择类,然后创建模型类。

     public class Department
    {
        public string DepartmentName { get; set; }
        public string DepartmentRule { get; set; }
        public string AdminComment { get; set; }
    }

    public class Company
    {
        public List<department>  Department { get; set; }
    }

4. 在 **Views** 文件夹下创建一个名为 **Home** 的新文件夹,并创建一个 Index 视图

并复制以下代码

@model PartialViewDemo.Models.Company

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
 <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
        <div>
            <h1>This is from main view upper.</h1>
        </div>
        <div>
            @Html.Partial("_MyPartialView", Model.Department )
            @{
                Html.RenderPartial("_MyPartialView", Model.Department);
            }
        </div>
        <div>
            <h1>This is from main view lower.</h1>
        </div>
        <div id="divTest">
        </div>
        <input type="button" value="Click" id="btnClick"/>
</body>
    <script src="~/Content/jquery-1.7.1.min.js"></script>
    <script type="text/javascript">
        $(function() {
            $('#btnClick').click(function(data) {
                $.post("@Url.Action("ShowPartailView", "Home")", function(data) {
                    if (data) {
                        $('#divTest').append(data);
                    }
                });
            });
        });
</script>
</html>

<meta content="width=device-width" name="viewport" /> <title></title>

5. 在 **Views** 文件夹下创建一个名为 **shared** 的新文件夹 - 部分视图、布局或母版页存储在共享文件夹中,因为它们是可共享的并且可以重复使用。然后添加两个部分视图(i)_MyPartialview 和 MySecondPartialView。

在 _MyPartialView 中复制以下代码

@model List<PartialViewDemo.Models.Department>
<h6> This below table content is from partial view</h6>
@if (Model != null)
 {
     <div>
         <table cellspacing="0"width="50%" border="1">
                <thead>
                 <tr>
                     <th>
                         Department Name
                     </th>
                     <th>
                         Department Rule
                     </th>
                     <th>
                         Admin Comment
                     </th>
                 </tr>
             </thead>
              <tbody>
                 @foreach (var dept in Model)
                 {
                     <tr>
                         <td align="center">
                             @dept.DepartmentName
                         </td>
                         <td align="center">
                             @dept.DepartmentRule
                         </td>
                         <td align="center">
                             @dept.AdminComment
                         </td>
                     </tr>
                 }
             </tbody>
       </table>
     </div>
 }

在 _MySecondPartial.cshtml 中

<h3> Testing for partial view</h3>

现在我们已经完成了编码部分。让我们调试它。运行并检查。

请下载演示版进行检查。

© . All rights reserved.