ASP.NET MVC知识盘点:视图 asp.net mvc 视频
suiw9 2024-11-06 20:21 16 浏览 0 评论
1Razon语法
使用@符号后接C#或VB.NET语句的方式。
基本规则
1)变量
@后直接变量即可
2)代码块
为使用表达式或多行代码,@后跟大括号将多行代码包括在大括号中
3)“+”
对于加号连接的两个字符串变量或属性,使用小括号将他们括起来
4)插入HTML或文字
每一行前面加上“@:”
5)使用注释
使用@*和*@将要注释的部分包起来
6)用@@在页面上显示@
@using
在一个View中引入此页所需程序集的命名空间。
还可以在web.config中配置命名空间,不过将对所有的View起作用。
<system.web.webPages.razor> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces > <add namespace="System.Web.Mvc"/> <add namespace="WebApplication.Models"/> </namespaces> </pages> </system.web.webPages.razor>
@model
指定页面所用模型的类型。
@help
使用自定义函数。这种方法有可能将一部分数据处理逻辑放到了页面中,所以尽量不用。
例子:
定义函数
@helper CheckHelp(int i1,int i2) { if (i1 > i2) { @i1 } else { @i2 } }
使用函数
<h3>@CheckHelp(10,1111)</h3>
@functions
定义一个方法供当前页使用,若使用IHtmlString作为方法的返回值,则可将其回传给当前页。
例子:
定义函数
@functions { public int CheckFunc(int i1, int i2) { if (i1 > i2) { return i1; } else { return i2; } } }
使用函数
<h3>@CheckFunc(10, 12111)</h3>
2 HTML辅助方法
使用方式为@后跟辅助方法,注意没有“;”,否则分号也会显示在页面上。
2.1输出超链接
ActionLink
有几个重载方法,选参数最多的一个
public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, string controllerName, string protocol, string hostName, string fragment, RouteValueDictionary routeValues, IDictionary<string, object> htmlAttributes);
linkText:超连接名称
actionName:操作名称
controllerName:控制器名称
protocol:URL 协议,如“http”或“https”。
hostName:URL 的主机名
fragment:URL 片段名称(定位点名称)
routeValues:路由参数
htmlAttributes:HTML 特性
例:
@Html.ActionLink("一个连接", "About")
对应的html代码
<a href="/MVCPointApp/Home/About">一个连接</a>
RouteLink
有几个重载方法,选参数最多的一个
public static MvcHtmlString RouteLink(this HtmlHelper htmlHelper, string linkText, string routeName, string protocol, string hostName, string fragment, RouteValueDictionary routeValues, IDictionary<string, object> htmlAttributes);
routeName:路由名称
其他参数同ActionLink
2.2输出表单
还可以使用强类型的辅助方法,一般是以For结尾。
例子
1)显示属性验证信息
控制器
public ActionResult TestViewData(ModelF mf) { ViewData.Model = new ModelF { Field = mf.Field, Field2 = mf.Field2 }; return View("Index"); }
模型
public class ModelF { public string Field { get; set; } [Range(typeof(DateTime), "1/1/2018", "1/1/2019")] public DateTime Field2 { get; set; } }
视图Index.cshtml
@using (Html.BeginForm("TestViewData", "Home")) { @Html.ValidationSummary() <input id="filed" name="Field2" type="text" placeholder="请输入" value="" /> <input type="submit" value="提交" /> }
测试,输入1/1/2020,执行结果为:
为了能显示字段的中文名称使用DisplayName
public class ModelF { public string Field { get; set; } [Range(typeof(DateTime), "1/1/2018", "1/1/2019")] [DisplayName("[这个字段]")] public DateTime Field2 { get; set; } }
执行结果为
2)设置标签特性值
由于class是C#保留关键字,因此设置class特性时要使用@
@using (Html.BeginForm("Login", "Account", FormMethod.Post, new { @class = "loginForm" })) { }
HTML辅助方法会将下划线渲染为连字符,因此要表达含有连字符的特性,那么使用下划线
Html.BeginForm("Login", "Account", FormMethod.Post, new { vla_input=true})
2.3加载分部视图
3 Url辅助方法
返回URI字符串
4 视图定位
· 视图放在Views文件夹下
· Views文件夹的子文件夹名称为控制器名称
· 视图名称可以是控制器操作方法名称也可以不是,若不是控制器操作方法名称,控制器返回视图时要指定视图名。
· Views文件夹下的Shared保存多个控制器共享的视图
视图定位规则是,先在Views文件夹中找对应控制器及控制器方法的视图,没有找到就到Shared文件夹下找。
5页面布局
· Views文件夹下_ViewStart.cshtml文件指定默认的模板,这个视图先于任何试图运行。
· 使用WebPageBase.Layout加载布局模板
· 使用@Html.Partial帮助方法加载部分视图
· 使用@section定义指定内容的节,然后使用WebPageBase.RenderSection加载指定的节,使用public HelperResult RenderSection(string name, bool required);required=true,那么节必须已经定义,否则抛异常。
· @Styles.Render和@Scripts.Render捆绑和压缩css、js
捆绑和压缩css与js
App_Start文件夹下BundleConfig类中
public static void RegisterBundles(BundleCollection bundles) { //多个文件用逗号分隔 bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include( "~/Scripts/jquery.cookie.js", "~/Scripts/jquery.hoverDelay.js", "~/Scripts/jquery.pagination.js", "~/Scripts/jquery.form.js", "~/Scripts/json2.js", "~/Scripts/hydss.js", "~/Scripts/hydss.utility.js")); bundles.Add(new StyleBundle("~/Content/css/base").Include( "~/Content/css/common.css", "~/Content/css/dev.css")); }
页面中使用已经捆绑并压缩的css和js,使用规则是:css文件置顶、js文件置地
@Styles.Render("~/Content/css/base") @Scripts.Render("~/bundles/jqueryval")
覆盖默认布局模板
使用WebPageBase.Layout加载模板覆盖_ViewStart.cshtml文件指定默认的模板
例如:
_ViewStart.cshtml文件如下
@{ Layout = "~/Views/Shared/_Layout.cshtml"; }
Index.cshtml文件如下
@{ ViewBag.Title = "Home Page"; Layout = "~/Views/Shared/_LayoutOther.cshtml"; } <div class="jumbotron"> @*具体内容*@ </div>
如果没有Layout = "~/Views/Shared/_LayoutOther.cshtml";这行代码,那么此视图文件将使用_ViewStart.cshtml中的_Layout.cshtml这个模板,但这里Index.cshtml文件使用的是另一个模板_LayoutOther.cshtml
使用实例
实际项目中可能会有不止一种布局,针对多种布局,既能满足这种需求要能尽可能地代码复用。
创建父模板_Layout.cshtml
<!DOCTYPE html> <html> <head> <title>@ViewBag.Title</title> <link rel="icon" href="~/favicon.ico" /> <link rel="shortcut Icon" href="~/favicon.ico" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="imagetoolbar" content="no" /> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="keywords" content="词1 词2" /> <meta name="description" content="网站的主题" /> @Styles.Render("~/Content/css/base") @Scripts.Render("~/bundles/jquery") @*加载HeaderSection节*@ @RenderSection("HeaderSection", false) </head> <body> @*加载主体*@ @RenderBody() <img id="loading" style="display:none;position:fixed;top:50%;left:50%;" src="@Url.Content("~/Content/images/loading.gif")" title="加载中..." alt="加载中..." /> <a href="javascript:void(0);" id="backToTop" title="回到顶部"></a> @*加载脚本*@ @Scripts.Render("~/bundles/jqueryval") @*加载FooterSection节*@ @RenderSection("FooterSection", false) </body> </html>
创建子模板_LayoutOther.cshtml
@{ Layout = "~/Views/Shared/_Layout.cshtml"; } @*定义HeaderSection节*@ @section HeaderSection{ @RenderSection("HeaderSection", false) } @*加载页头*@ @Html.Partial("_header") @*加载主体*@ @RenderBody() @*加载页脚*@ @Html.Partial("_footer") @*定义FooterSection节*@ @section FooterSection{ @RenderSection("FooterSection", false) }
分析
_LayoutOther.cshtml视图使用了_Layout.cshtml视图文件,_Layout.cshtml中@RenderSection来加载FooterSection和HeaderSection节,而这个节定义在_LayoutOther.cshtml中,不过没有具体内容;_LayoutOther.cshtml中定义的FooterSection和HeaderSection又各自加载其他也面定义的FooterSection和HeaderSection节,所以可以在使用_LayoutOther.cshtml中灵活定义FooterSection和HeaderSection节,可以想象这样一个场景,每个页面都需要加载js文件,而他们既有共用的js文件,又有非共用的js文件,那么可以在使用_LayoutOther.cshtml的视图中定义section 节来加载只有此页面使用的js文件,而把公共的js文件放在_Layout.cshtml视图文件中
例如Index.cshtml定义@section FooterSection{
@Scripts.Render("~/bundles/index")
}
这个节加载只供Index.cshtml这个页面实用的js,这样其他不需要这个js的页面就不必加载这个js,从而达到减少页面加载文件的目的进而优化了页面。
6加载分部视图
1)控制器返回分部视图
配合@Html.Action方法使用控制器操作返回分部视图
视图中使用@Html.Action("TestPy"),控制器如下
public ActionResult TestFrom() { return PartialView("TestPy"); }
或者在视图中使用@{Html.RenderAction("TestPy");},注意这种内联视图和Html.Action使用的区别。
2)使用html帮助方法
使用Html.Partial直接调用部分视图而不是通过控制器操作方法。
@Html.Partial("_header")
7视图向控制器传递数据
1)使用表单向控制器传递数据
视图代码
@using (Html.BeginForm("TestFrom", "Home")) { <input id="UserName" name="UserName" type="text" placeholder="请输入用户名" value="" /> <input id="Password" name="Password" type="password" placeholder="请输入密码" value="" /> <input type="submit" value="提交"/> }
控制器代码
public ActionResult TestFrom(FormCollection c) { var un = c["UserName"]; var pw = c["Password"]; ViewBag.Un = un; ViewBag.Pw = pw; return PartialView("TestPy"); }
8自定义html辅助方法
返回值类型为IHtmlString,IHtmlString 是一个接口
public static IHtmlString HYSubString(this HtmlHelper helper, string param) { //字符串 String ret =...... return helper.Raw(ret); }
参考:
1. Jess Chadwick/Todd Snyder/Hrusikesh Panda,徐雷/徐扬
译。ASP.NET MVC4 Web编程
2. Jon Galloway/Phil Haack/Brad Wilson/K. Scott Allen,孙远帅/邹权译 ASP.NET MVC4 高级编程(第四版)
3. ASP.NET MVC4开发指南,黄保翕
4. ASP.NET MVC4框架揭秘,蒋金楠
5. https://www.asp.net/mvc
相关推荐
- 5款Syslog集中系统日志常用工具对比推荐
-
一、为何要集中管理Syslog?Syslog由Linux/Unix系统及其他网络设备生成,广泛分布于整个网络。因其包含关键信息,可用于识别网络中的恶意活动,所以必须对其进行持续监控。将Sys...
- 跨平台、多数据库支持的开源数据库管理工具——DBeaver
-
简介今天给大家推荐一个开源的数据库管理工具——DBeaver。它支持多种数据库系统,包括Mysql、Oracle、PostgreSQL、SLQLite、SQLServer等。DBeaver的界面友好...
- 强烈推荐!数据库管理工具:Navicat Premium 16.3.2 (64位)
-
NavicatPremium,一款集数据迁移、数据库管理、SQL/查询编辑、智能设计、高效协作于一体的全能数据库开发工具。无论你是MySQL、MariaDB、MongoDB、SQLServer、O...
- 3 年 Java 程序员还玩不转 MongoDB,网友:失望
-
一、什么场景使用MongoDB?...
- 拯救MongoDB管理员的GUI工具大赏:从菜鸟到极客的生存指南
-
作为一名在NoSQL丛林中披荆斩棘的数据猎人,没有比GUI工具更称手的瑞士军刀了。本文将带你围观五款主流MongoDB管理神器的特性与暗坑,附赠精准到扎心的吐槽指南一、MongoDBCompass:...
- mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?
-
前言最近在做neo4j相关的同步处理,因为产线的可视化工具短暂不可用,发现写起来各种脚本非常麻烦。...
- solidworks使用心得,纯干货!建议大家收藏
-
SolidWorks常见问题...
- 统一规约-关乎数字化的真正实现(规范统一性)
-
尽管数字化转型的浪潮如此深入人心,但是,对于OPCUA和TSN的了解却又甚少,这难免让人质疑其可实现性,因为,如果缺乏统一的语义互操作规范,以及更为具有广泛适用的网络与通信,则数字化实际上几乎难以具...
- Elasticsearch节点角色配置详解(Node)
-
本篇文章将介绍如下内容:节点角色简介...
- 产前母婴用品分享 篇一:我的母婴购物清单及单品推荐
-
作者:DaisyH8746在张大妈上已经混迹很久了,有事没事看看“什么值得买”已渐渐成了一种生活习惯,然而却从来没有想过自己要写篇文章发布上来,直到由于我产前功课做得“太过认真”(认真到都有点过了,...
- 比任何人都光彩照人的假期!水润、紧致的肌肤护理程序
-
图片来源:谜尚愉快的假期临近了。身心振奋的休假季节。但是不能因为这种心情而失去珍贵的东西,那就是皮肤健康。炙热的阳光和强烈的紫外线是使我们皮肤老化的主犯。因此,如果怀着快乐的心情对皮肤置之不理,就会使...
- Arm发布Armv9边缘AI计算平台,支持运行超10亿参数端侧AI模型
-
中关村在线2月27日消息,Arm正式发布Armv9边缘人工智能(AI)计算平台。据悉,该平台以全新的ArmCortex-A320CPU和领先的边缘AI加速器ArmEthos-U85NPU为核心...
- 柔性——面向大规模定制生产的数字化实现的基本特征
-
大规模定制生产模式的核心是柔性,尤其是体现在其对定制的要求方面。既然是定制,并且是大规模的定制,对于制造系统的柔性以及借助于数字化手段实现的柔性,就提出了更高的要求。面向大规模定制生产的数字化业务管控...
- 创建PLC内部标准——企业前进的道路
-
作者:FrankBurger...
- 标准化编程之 ----------- 西门子LPMLV30测试总结
-
PackML乃是由OMAC开发且被ISA所采用的自动化标准TR88.00.02,能够更为便捷地传输与检索一致的机器数据。PackML的主要宗旨在于于整个工厂车间倡导通用的“外观和感觉”,...
你 发表评论:
欢迎- 一周热门
-
-
Linux:Ubuntu22.04上安装python3.11,简单易上手
-
宝马阿布达比分公司推出独特M4升级套件,整套升级约在20万
-
MATLAB中图片保存的五种方法(一)(matlab中保存图片命令)
-
别再傻傻搞不清楚Workstation Player和Workstation Pro的区别了
-
Linux上使用tinyproxy快速搭建HTTP/HTTPS代理器
-
如何提取、修改、强刷A卡bios a卡刷bios工具
-
Element Plus 的 Dialog 组件实现点击遮罩层不关闭对话框
-
日本组合“岚”将于2020年12月31日停止团体活动
-
SpringCloud OpenFeign 使用 okhttp 发送 HTTP 请求与 HTTP/2 探索
-
tinymce 号称富文本编辑器世界第一,大家同意么?
-
- 最近发表
-
- 5款Syslog集中系统日志常用工具对比推荐
- 跨平台、多数据库支持的开源数据库管理工具——DBeaver
- 强烈推荐!数据库管理工具:Navicat Premium 16.3.2 (64位)
- 3 年 Java 程序员还玩不转 MongoDB,网友:失望
- 拯救MongoDB管理员的GUI工具大赏:从菜鸟到极客的生存指南
- mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?
- solidworks使用心得,纯干货!建议大家收藏
- 统一规约-关乎数字化的真正实现(规范统一性)
- Elasticsearch节点角色配置详解(Node)
- 产前母婴用品分享 篇一:我的母婴购物清单及单品推荐
- 标签列表
-
- dialog.js (57)
- importnew (44)
- windows93网页版 (44)
- yii2框架的优缺点 (45)
- tinyeditor (45)
- qt5.5 (60)
- windowsserver2016镜像下载 (52)
- okhttputils (51)
- android-gif-drawable (53)
- 时间轴插件 (56)
- docker systemd (65)
- slider.js (47)
- android webview缓存 (46)
- pagination.js (59)
- loadjs (62)
- openssl1.0.2 (48)
- velocity模板引擎 (48)
- pcre library (47)
- zabbix微信报警脚本 (63)
- jnetpcap (49)
- pdfrenderer (43)
- fastutil (48)
- uinavigationcontroller (53)
- bitbucket.org (44)
- python websocket-client (47)