MVC分部视图的使用:Html.Partial/RenderPartial,Html.Action/RenderAction,RenderPage

这篇具有很好参考价值的文章主要介绍了MVC分部视图的使用:Html.Partial/RenderPartial,Html.Action/RenderAction,RenderPage。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ASP.NET MVC 里的部分视图,相当于 Web Form 里的 User Control。我们的页面往往会有许多重用的地方,可以进行封装重用。
使用部分视图有以下优点: 1. 可以简写代码。 2. 页面代码更加清晰、更好维护。
在视图里有多种方法可以 加载部分视图,包括: Partial() 、RenderPartial() 、 Action() 、RenderAction() 、 RenderPage() 方法

一、Partial与RenderPartial

1.Razor 语法: @Html.Partial() 与 @{Html.RenderPartial();}
2.区别:Partial 可以直接输出内容,它内部是 将 html 内容转换为 string 字符(MVCHtmlString)(进行Html编码),然后缓存起来,最后在一次性输出到页面。显然,这个转换的过程,会降低效率,所以通常使用 RenderPartial 代替。 这两者都只是抓取分部视图页面类容,不能执行分部视图方法,所以用Partial或RenderPartial方法来显示分部视图不用建立对应的Action,因为不走Action.
3.实例:

普通调用分部视图

主页 Index.cshtml:

@{  
    Layout = null;  
}  
  
<!DOCTYPE html>  
  
<html>  
<head>  
    <meta name="viewport" content="width=device-width" />  
    <title>Index</title>  
</head>  
<body>  
    <div>   
        <h3>我是首页</h3>  
        <section>  
            <h2>分部视图</h2>  
            @Html.Partial("~/Views/Templates/Partial1.cshtml")  
        //@{Html.RenderPartial("~/Views/Templates/Partial1.cshtml");}  
 </section> </div></body></html>  
分部视图Partial1.cshtml:  
<table border="1px solid" cellpadding="0" cellspacing="0">  
    <tr>  
        <th>姓名</th>  
        <th>性别</th>  
        <th>年龄</th>  
        <th>电话</th>  
    </tr>  
    <tr>  
        <td>longxi1</td>  
        <td></td>  
        <td>22</td>  
        <td>13521187063</td>  
    </tr>  
    <tr>  
        <td>longxi1</td>  
        <td></td>  
        <td>22</td>  
        <td>13521187063</td>  
    </tr>  
</table>  
强类型分部视图:  
主页 Index.cshtml:  
@using WebApplication1.Models  
@{  
    Layout = null;  
}  
@{   
    List<Student> students = new List<Student>() {  
        new Student("zhulongxi",22,"男","13521187063"),  
        new Student("zhulongxi",22,"男","13521187063"),  
        new Student("zhulongxi",22,"男","13521187063"),  
        new Student("zhulongxi",22,"男","13521187063"),  
        new Student("zhulongxi",22,"男","13521187063")  
    };  
}  
<!DOCTYPE html>  
  
<html>  
<head>  
    <meta name="viewport" content="width=device-width" />  
    <title>Index</title>  
</head>  
<body>  
    <div>   
        <h3>我是首页</h3>  
        <section>  
            <h4>分部视图</h4>  
            @Html.Partial("~/Views/Templates/Partial1.cshtml", students)//如果Partial1.cshtml与Index.cshtml在相同目录,则可以直接写成  
        @Html.Partial("Partial1", students)  
 </section> </div></body></html>  

分部视图Partial1.cshtml:

@using WebApplication1.Models;  
@{   
    var studentsList = Model as List<Student>;  
}  
<table border="1px solid" cellpadding="0" cellspacing="0">  
    @foreach (Student student in studentsList)  
    {  
        <tr>  
            <th>@student.Name</th>  
            <th>@student.Gender</th>  
            <th>@student.Age</th>  
            <th>@student.Phone</th>  
        </tr>  
    }  
</table>  

二、Action与RenderAction

1.Razor 语法:@Html.Action()与@{Html.RenderAction();}
2.区别:Action 也是直接输出,和 Partial 一样,也存在一个转换的过程。不如 RenderAction 直接输出到当前 HttpContext 的效率高。
除此之外,Action与Partial相比,Action访问了控制器中的Action,执行了Action内部的业务。
3.实例:
Index.cshtml:

<!DOCTYPE html>  
  
<html>  
<head>  
    <meta name="viewport" content="width=device-width" />  
    <title>Index</title>  
</head>  
<body>  
    <div>   
        <h3>我是首页</h3>  
        <section>  
            <h4>分部视图</h4>  
            @Html.Action("MyPartial", "Home",new { title="学生列表"})  
        </section>  
    </div>  
</body>  
</html>  

HomController:

public class HomeController : Controller  
    {  
        // GET: Home  
        public ActionResult Index()  
        {  
            return View();  
        }  
        public ActionResult MyPartial(string title)  
        {  
            List<Student> students = new List<Student>() {  
            new Student("zhulongxi2",22,"男","13521187063"),  
            new Student("zhulongxi2",22,"男","13521187063"),  
            new Student("zhulongxi2",22,"男","13521187063"),  
            new Student("zhulongxi2",22,"男","13521187063"),  
            new Student("zhulongxi2",22,"男","13521187063")  
             };  
            ViewBag.Data = title;  
            return PartialView("~/Views/Templates/Partial2.cshtml",students);  
        }  
    }  

Partial2.cshtml:

@using WebApplication1.Models  
@{   
    var studentsList = Model as List<Student>;  
    var data = ViewBag.Data;  
}  
@{Response.Write(data); }  
<table border="1px solid" cellpadding="0" cellspacing="0">  
    @foreach (Student student in studentsList)  
    {  
        <tr>  
            <th>@student.Name</th>  
            <th>@student.Gender</th>  
            <th>@student.Age</th>  
            <th>@student.Phone</th>  
        </tr>  
    }  
</table>  

MVC分部视图的使用:Html.Partial/RenderPartial,Html.Action/RenderAction,RenderPage

三、RenderPage

1.Razor语法:@RenderPage()
2.区别:也可以使用 RenderPage 来呈现部分,但它不能使用 原来视图的 Model 和 ViewData ,只能通过参数来传递。而 RenderPartial、RenderAction 可以使用原来视图的 Model 和 ViewData。@RenderPage也并没有执行Action。
3.实例:
不传参数情况:
Index.cshtml:

<!DOCTYPE html>  
  
<html>  
<head>  
    <meta name="viewport" content="width=device-width" />  
    <title>Index</title>  
</head>  
<body>  
    <div>   
        <h3>我是首页</h3>  
        <section>  
            <h4>分部视图</h4>  
            
           @RenderPage("~/Views/Templates/Partial1.cshtml")  
        </section>  
    </div>  
</body>  
</html>  

传参数情况:
Index.cshtml:

<!DOCTYPE html>  
<html>  
<head>  
    <meta name="viewport" content="width=device-width" />  
    <title>Index</title>  
</head>  
<body>  
    <div>   
        <h3>我是首页</h3>  
        <section>  
            <h4>分部视图</h4>  
           @RenderPage("~/Views/Templates/Partial1.cshtml",new { param1="longxi",param2="男"})  
        </section>  
    </div>  
</body>  
</html>  

Partial1.cshtml:文章来源地址https://www.toymoban.com/news/detail-438125.html

@{   
    var param = string.Format("{0}-{1}", PageData["param1"], PageData["param2"]);  
}  
@Html.Raw(param) 

到了这里,关于MVC分部视图的使用:Html.Partial/RenderPartial,Html.Action/RenderAction,RenderPage的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ASP.NET Core MVC中的IActionFilter.OnActionExecuting方法,可以获取Controller的Action方法参数值

    用过ASP.NET Core MVC中IActionFilter拦截器的开发人员,都知道这是一个非常强大的MVC拦截器。最近才发现IActionFilter的OnActionExecuting方法,甚至可以获取Controller的Action方法参数值。 假如我们在ASP.NET Core MVC项目中有一个HomeController,其中有一个Action方法叫Login,该方法有一个LoginRequ

    2023年04月20日
    浏览(70)
  • ASP.NET Core MVC -- 将视图添加到 ASP.NET Core MVC 应用

    右键单击“视图”文件夹,然后单击“添加”“新文件夹”,并将文件夹命名为“HelloWorld”。 右键单击“Views/HelloWorld”文件夹,然后单击“添加”“新项”。 在“添加新项 - MvcMovie”对话框中: 在右上角的搜索框中,输入“视图” 选择“Razor 视图 - 空” 保持“名称”框的

    2024年02月13日
    浏览(91)
  • 如何将 ASP.NET Core MVC 项目的视图分离到另一个项目

    在当下这个年代 SPA 已是主流,人们早已忘记了 MVC 以及 Razor 的故事。但是在某些场景下 SSR 还是有意想不到效果。比如某些静态页面,比如追求首屏加载速度的时候。最近在项目中回归传统效果还是不错。 有的时候我们希望将视图(Views)从主项目中分离出来,以提高项目的

    2024年04月22日
    浏览(64)
  • (2)前端控制器的扩展配置, 视图解析器类型以及MVC执行流程的概述

    注册前端控制器的细节 在web.xml文件注册SpringMVC的前端控制器 DispatcherServlet 时在url-pattern标签中使用 / 和 /* 的区别 / 可以匹配.html或.js或.css等方式的请求路径,但不匹配*.jsp的请求路径 /* 可以匹配所有请求(包括.jsp请求), 例如在过滤器中使用 /* 表示匹配所有请求 DispatcherServle

    2024年02月15日
    浏览(47)
  • Spring MVC学习随笔-控制器(Controller)开发详解:控制器跳转与作用域(二)视图模板、静态资源访问

    学习视频:孙哥说SpringMVC:结合Thymeleaf,重塑你的MVC世界!|前所未有的Web开发探索之旅 衔接上文Spring MVC学习随笔-控制器(Controller)开发详解:控制器跳转与作用域(一) SpingMVC中request作用域的处理 代码 Model、ModelMap相关细节分析 通过Model、ModelMap进行作用域处理,可以解决

    2024年02月05日
    浏览(47)
  • 差异对比犀利手册:使用 Partial Diff 插件在 VSCode 中比较代码差异

    简介: 在本教程中,我们将介绍如何在 Visual Studio Code(VSCode)编辑器中安装和使用 Partial Diff 插件来进行源代码文件的差异比较。Partial Diff 插件是一个强大且简单的工具,可以帮助你更容易地查看和理解代码的变化。在本教程中,我们将带你从头开始,一步一步地进行安装

    2024年02月05日
    浏览(57)
  • ASP.NET Core MVC 从入门到精通之Html辅助标签(一)

    随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前几篇文章的讲解,初步

    2024年02月08日
    浏览(37)
  • GitHub Action 使用

    GitHub Actions 是一种持续集成和持续交付 (CI/CD) 平台,可用于自动执行生成、测试和部署管道。 您可以创建工作流程来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。GitHub 提供 Linux、Windows 和 macOS 虚拟机来运行工作流程,或者您可以在自己的数据中

    2024年02月07日
    浏览(74)
  • ASP.NET Core MVC 从入门到精通之Html辅助标签补充及模型校验基础

    随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前几篇文章的讲解,初步

    2024年02月08日
    浏览(51)
  • Baumer工业相机堡盟相机如何使用ROI感兴趣区域功能( PARTIAL SCAN ROI功能的优点和行业应用)(C#)

    Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。   Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可

    2024年02月05日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包