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

news2024/11/16 11:25:18

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>  

请添加图片描述

三、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:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/509841.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

运营-10.算法分发

定义&#xff1a; 通过对信息的自动过滤和分流&#xff0c;从而实现对不同用户的个性化推荐 算法分发三要素 算法的前提 算法分发的前提&#xff1a;了解用户的喜好&#xff0c;给用户做画像。 用户画像是根据用户 基本属性 、 社会属性 、 行为属性 和 消费属性 等真实数 据信…

流式作业如何保证真正的精准一次消费

checkpoint 两阶段提交和WAL 真的是神&#xff01;&#xff01;&#xff01;&#xff01; 彻底解决了重复消费问题!! 状态一致性 当在分布式系统中引入状态时&#xff0c;自然也引入了一致性问题。一致性实际上是"正确性级别"的另一种说法&#xff0c;也就是说在成功…

【美化命令行教程】

目录 下载字体打开Teminal设置 美化powershell注意&#xff1a;主题路径powershell 自动提示看效果 美化git看效果 下载字体 防止乱码一定要下载下面的字体并安装 下载作者推荐MesloLGM NF字体&#xff0c;点此下载 打开Teminal设置 修改Teminal配置文件json "font&q…

数组存储与指针学习笔记(二)枚举类型、常量与变量

嵌入式C语言学习进阶系列文章 GUN C编译器拓展语法学习笔记(一&#xff09;GNU C特殊语法部分详解 GUN C编译器拓展语法学习笔记(二&#xff09;属性声明 GUN C编译器拓展语法学习笔记(三&#xff09;内联函数、内建函数与可变参数宏 数组存储与指针学习笔记(一&#xff09;数…

听劝 千万不要盲目自学网络安全

听劝 不要什么盲目的学网络安全。 一&#xff0c;怎么入门&#xff1f; 1、Web 安全相关概念&#xff08;2 周&#xff09; 了解网络安全相关法律法规 熟悉基本概念&#xff08;SQL 注入、上传、XSS、CSRF、一句话木马等&#xff09;。 通过关键字&#xff08;SQL 注入、…

人工智能简历-计算机视觉简历

前言 很多粉丝私我&#xff0c;说面试的事情。 这玩意我不理解&#xff0c;因为如果是计算机科班出身&#xff0c;计算机行业我觉得闭着眼睛找。 简历这玩意我真不会。。。 分享2个东西给大家。 第一个是 出国/在国外找实习/外企的英文简历。 比较流行的是一页。 第二个…

高速动车组全谱系图解

很多人认为中国高速铁路起源于2004年以来的技术引进&#xff0c;却不知道中国第一条高铁是1999年开工、2003年建成的秦沈客专&#xff1b;动车组的研制则更早&#xff0c;“蓝箭”、“中原之星”、“中华之星”都是鼎鼎大名。毫无疑问&#xff0c;2004年以来的引进技术&#xf…

SPI配置

I/O配置 主输出、从输入&#xff08;MOSI&#xff09; 主出从入&#xff08;MOSI &#xff09;引脚是主器件的输出和从器件的输入&#xff0c;用于主器件到从器件的串行数据传输。当SPI 配置为主器件时&#xff0c;该引脚为输出&#xff0c;当 SPI 配置为从器件时&#xff0c;该…

【原创】免费,不限量,使用OpenAI ChatGPT方法大揭秘

文章目录 微软的Edge浏览器集成WeTab插件就可以免费使用ChatGPT1、安装最新版的Edge浏览器2、选中浏览器的配置中的扩展3、在启动新页时&#xff0c;就可以看到chatGPT了4、这就可以免费使用chatGPT啦 微软的Edge浏览器集成WeTab插件就可以免费使用ChatGPT 1、安装最新版的Edg…

零信任网络安全

什么是零信任 零信任是一种安全思维方式&#xff0c;表示组织不应自动信任其边界内外的任何内容。在授予访问权限之前&#xff0c;必须验证任何尝试连接的实体。零信任安全策略围绕最低特权访问控制和严格的用户身份验证&#xff0c;因为假设不信任任何人。 若要实现这些原则…

4年外包终于上岸,我只能说别去....

我大学学的是计算机专业&#xff0c;毕业的时候&#xff0c;对于找工作比较迷茫&#xff0c;也不知道当时怎么想的&#xff0c;一头就扎进了一家外包公司&#xff0c;一干就是4年。现在终于跳槽到了互联网公司了&#xff0c;我想说的是&#xff0c;但凡有点机会&#xff0c;千万…

你不知道的自动化?使用自动化测试在项目中创造高业务价值...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 脱离数据支撑谈价…

WPF中嵌入web网页控件 WebBrowser

1 WebBrowser特点 <font colorblue>WebBrowser控件内部使用IE的引擎&#xff0c;因此使用WebBrowser我们必须安装IE浏览器。 WebBrowser使用的是IE内核&#xff0c;许多H5新特性都不支持&#xff0c;然后使用谷歌内核和火狐内核会使软件的体积增加至几十MB。 <font c…

《MySQL 必知必会》课程笔记(二)

这么多字段类型&#xff0c;该怎么定义&#xff1f; MySQL 中有很多字段类型&#xff0c;比如整数、文本、浮点数等。如果类型定义合理&#xff0c;就能节省存储空间&#xff0c;提升数据查询和处理的速度。相反&#xff0c;如果数据类型定义不合理&#xff0c;就有可能会导致…

详细版易学版TypeScript - 元组和枚举详解

一、元组(Tuple) 数组:合并了相同类型的对象 const myArr: Array<number> [1, 2, 3]; 元组(Tuple):合并了不同类型的对象 // 定义元组时就要确定好数据的类型&#xff0c;并一一对应 const tuple: [number, string] [12, "hi"]; // 添加内容时&#xff0c;不…

【Shiro】SimpleAuthorizationInfo如何授权

一、前言 本文基于上一篇文章进行介绍【Shiro】SimpleAuthenticationInfo如何验证password。 二、自定义的ShiroRealm类 经过上一篇文章的探求&#xff0c;这回直接找准doGetAuthorizationInfo方法&#xff1b;我们回过头看下ShiroRealm&#xff0c;它继承了AuthorizingRealm…

Hbase入门篇01---基本概念和部署教程

Hbase入门篇01---基本概念和部署教程 HBase基本概念HadoopHadoop的局限 HBase 与 NoSQLHBase应用场景发展历程HBase特点 RDBMS与HBase的对比关系型数据库HBaseHDFS对比HBaseHive对比Hbase总结Hive与HBase HBase集群搭建HBASE_MANAGES_ZK属性的作用安装报错&#xff0c;解决思路…

面试被问到了解哪些开发模型?看这一篇就够了

前言 软件开发模型是指软件开发全部过程、活动和任务的结构框架。一般包括需求、设计、编码和测试等阶段&#xff0c;甚至包括维护阶段。软件开发模型明确规定了软件开发过程中要完成的主要活动和任务&#xff0c;用来指导整个开发过程中的工作。对于不同的系统&#xff0c;可…

SSD系列2——PriorBox

SSD系列&#xff1a; SSD系列1——网络结构 SSD系列2——PriorBox SSD系列3——损失计算 PriorBox SSD采用PriorBox来进行区域生成&#xff0c;其思想与Faster RCNN的Anchor类似。PriorBox的本质是在原图上的一系列矩形框&#xff0c;即特征图上的一个点根据下采样率可以得到在…

创新驱动 共建生态|鲲鹏开发者峰会2023·GBASE南大通用技术论坛成功举办

5月7日&#xff0c;鲲鹏开发者峰会2023 GBASE南大通用技术论坛如约而至&#xff0c;吸引了数十位数据库技术专家、开发者参与讨论。本次论坛是GBASE南大通用联合openGauss社区、行业用户和生态伙伴共同举办的交流分享活动&#xff0c;邀请到包括鲲鹏计算产品部部长颜叶、四川信…