Razor视图中的@:和语法
Razor视图中的@:和语法
原创changuncle 最后发布于2016-12-07 17:43:50 阅读数 4456 收藏
展开
在MVC项目中新建视图的时候默认支持ASPX引擎和Razor引擎,如果选择ASPX引擎,那它跟webform项目中的*.aspx前台页面没区别,如果选择Razor引擎,那我们可以用更少的代码来实现相同的功能(与使用ASPX引擎相比较),我们不用在HTML中明确地标记出服务模块的结束标志,因为Razor解析器足够聪明,它可以自己推断出来。
HTML代码与C#代码混编
1、在前台声明和使用C#变量
如果想在前台声明C#变量,那声明C#变量的代码必须写在@{ }代码块中,使用@+C#变量名就能取得C#变量的值,注意前后必须有空格,否则会被当做普通字符输出。
混编代码:
浏览器截图:
2、前台利用foreach循环输出
@+C#变量名,表示获取C#变量的值;@+C#语句,表示执行C#代码。
item变量是在C#代码中声明的,所以要想调用C#变量item的值必须使用@item。
混编代码:
浏览器截图:
3、前台利用foreach嵌套if循环输出(连续)
当前台的C#代码有多行时,如果这些代码是连续的中间没有HTML代码隔断,那只需要开头的一个@符号即可。
混编代码:
浏览器截图:
4、前台利用foreach嵌套if循环输出(不连续)
当前台的C#代码有多行时,如果这些代码是不连续的,中间被HTML代码隔断,那HTML代码之后的被隔断的C#代码开头需要加上@符号。
Razor用来隐式鉴别一个代码段什么时候结束的方法是寻找代表内容块开始的标记或元素内容。例如,在上面的例子中Razor自动地把if和else中的
< label>< /label>模块当作一个HTML内容块,因为它看到开始的< label>标记序列并且知道这在C#中是无效的。
然而不是所有的内容块都以标记元开始,在这种情况下Razor解析器不能隐式检测出内容块,这就需要Razor通过在代码块中使用“@:字符序列”来显式指明内容块的开始。
如果当item==”北京”时输出“item (首都)”这个字符序列,其他情况输出“item”,不能依靠简单地去掉@来实现:
因为C#代码不支持这种写法,代码如下:
if(item == "北京")
{
item (首都)
}
else
{
item
}
1
2
3
4
5
6
7
8
这时就用到@:了,如果想输出“item (首都)”,就写成“@:item (首都)”,此时@:之后的“item (首都)”被当做普通HTML代码处理。
这种写法之所以成立,是因为HTML代码支持这种写法,代码如下:
<div>
item (首都)
</div>
1
2
3
混编代码:
浏览器截图:
5、前台利用foreach嵌套if循环输出(不连续)
前台C#语句中声明的变量,也可以被前台调用。
如果既想输出item的值,又想输出一些普通字符串,那“@:字符序列”同样可以满足你的要求。
混编代码:
浏览器截图:
6、@:输出多行内容
在没有被外部HTML元素包装的情况下,如果需要输出多行内容时,可以使用多个“@:字符序列”来实现。
混编代码:
浏览器截图:
7、使用< text>元素显式标识内容
< text>标签是一个Razor特殊处理的元素。Razor将< text>块的内部内容视为内容块,不呈现包含那些内容的< text>标签,这使呈现没有被HTML元素包装的多行内容块更方便。当前台代码中有多个“@:字符序列”时,可用< text>< /text>来替换。
混编代码:
浏览器截图:
js代码与C#代码混编
1、js中嵌套C#的if结构
混编代码:
浏览器截图:
2、js中自有的if结构
当if语句的判断条件用到字符串类型的C#变量的值时,需要额外加上”“,否则C#变量的值会被当做js中的变量名,从而引发错误。
js中用到bool类型的C#变量的值时,也需要额外加上”“,否则报错:True is not defined或False is not defined,因此推断js中用到char、DateTime等其他类型的C#变量的值时,均需要额外加上”“,先把C#变量的值变为普通字符串,然后才能进行其他操作。int、float不需要额外加上”“。
不加”“的混编代码:
不加”“的浏览器截图:
加”“的混编代码:
加”“的浏览器截图:
3、js中嵌套C#的foreach(){ if(){ } }结构
混编代码:
浏览器截图:
4、js中自有的foreach(){ if(){ } }结构
js不能识别List< string>类型的数据,可以使用json数组来代替List< string>,前台对json数组进行循环操作即可。js中要用for(var index in array){ }来做循环操作,此处的index指的是数组索引值。
后台代码如下:
var array=@Html.Raw(@Model.CityListJson);的作用等价于本方法中注释掉的三行代码的作用,前台代码如下:
浏览器截图如下:
点赞 4
————————————————
版权声明:本文为CSDN博主「changuncle」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiaouncle/article/details/53505792
Razor视图中的@:和语法的更多相关文章
- .Net MVC4笔记之Razor视图引擎的基础语法
Razor视图引擎的基础语法: 1.“_”开头的cshtml文档将不能在服务器上访问,和asp.net中的config文档差不多. 2.Razor语法以@开头,以@{}进行包裹. 3.语法使用: 注释 ...
- ASP.Net MVC(3) 之Razor视图引擎的基础语法
Razor视图引擎的基础语法: 1.“_”开头的cshtml文档将不能在服务器上访问,和asp.net中的config文档差不多. 2.Razor语法以@开头,以@{}进行包裹. 3.语法使用: 注释 ...
- ASP.NET Core MVC的Razor视图中,使用Html.Raw方法输出原生的html
我们在ASP.NET Core MVC项目中,有一个Razor视图文件Index.cshtml,如下: @{ Layout = null; } <!DOCTYPE html> <ht ...
- YbSoftwareFactory 代码生成插件【二十五】:Razor视图中以全局方式调用后台方法输出页面代码的三种方法
上一篇介绍了 MVC中实现动态自定义路由 的实现,本篇将介绍Razor视图中以全局方式调用后台方法输出页面代码的三种方法. 框架最新的升级实现了一个页面部件功能,其实就是通过后台方法查询数据库内容,把 ...
- mvc Razor 视图中找不到 ViewBag的定义
在Razor 视图中,我们有时会看到 ViewBag.Title 下会划一个红线,当鼠标放上去的时候会提示这样的一个错误: 找不到编译动态表达式所需的一种或多种类型,是否缺少引用? 但在项目启动运行时 ...
- MVC5 Razor视图中不规范书写导致的编译问题
今天碰到一个非常让人难以理解的问题,如图所示,但是我在代码中并没有找到缺失"}"的地方: 根据源文件提示有去 AppData\Local\Temp\Temporary ASP.NE ...
- MVC3 Razor视图引擎的基础语法
好久没有关注微软的开发了,今天看到了MVC3,顺便学习学习,我觉得Razor是个不错的做法,比使用<%%>简单多了,而且好看.首先“_”开头的cshtml文档将不能在服务器上访问,和asp ...
- ASP.NET MVC 4 中Razor 视图中JS无法调试
解决方法 1.首先检查IE中这2个属性是否勾选了. 2.选择IE浏览器进行调试,调试方法有2种 A:采用debugger;的方法,如下图所示: 这时不用调试断点就会在debugger位置中命中 ...
- ASP.NET MVC 4 中Razor 视图中JS无法调试 (重要)
谷歌浏览器,firefox,IE 都可以 1.首先检查IE中这2个属性是否勾选了. 2.选择IE浏览器进行调试,调试方法有2种 A:采用debugger;的方法,如下图所示: 这时不用调试断点就会在d ...
随机推荐
- maven依赖包无法更新下载
在IDEA工程中导入已存在的module时,按默认设置,直到完成导入,结果所有的外部依赖包都无法更新下载,即使是更新了setting.xml配置文件信息,依旧是不能更新下载依赖包,现将具体的操作过程和 ...
- JavaScript:JSON对象
一.JSON对象概念 JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧. JSON 是 JavaScript 原生格式,这意味着在 JavaScri ...
- Selenium3+python自动化016-Selenium Grid
一.Selenium Grid介绍 1.概念 Selenium Grid组件专门用于远程分布式测试或并发测试,通过并发执行测试用例的方式可以提高测试用例的执行速度和效率,解决界面自动化测试执行速度过慢 ...
- java学习笔记之IO编程—对象序列化
对象序列化就是将内存中保存的对象以二进制数据流的形式进行处理,可以实现对象的保存或网络传输. 并不是所有的对象都可以被序列化,如果要序列化的对象,那么对象所在的类一定要实现java.io.Serial ...
- 如何将.sql文件导入到mysql的数据库中
首先通过cmd的net start mysql57 启动mysql的服务器 然后,输入命令:mysql -h 127.0.0.1 -u root -p来启动mysql服务 最后 上图画红圈的部分是.s ...
- C#继承是个啥
继承: 字面意思就是继承 如地主老王有500亩地,老王的儿子小王可以种这五百亩地可以随便拿这五百亩地上面的任何东西 如Controller 你要用从一个controller调用另一个controlle ...
- Wannafly Camp 2020 Day 1I K小数查询 - 分块
给你一个长度为\(n\)序列\(A\),有\(m\)个操作,操作分为两种: 输入\(x,y,c\),表示对\(i\in[x,y]\),令\(A_{i}=min(A_{i},c)\) 输入\(x,y,k ...
- Could not connect to SMTP host: smtp.qq.com, port: 465, response: -1 SpringBoot发送邮件
解决方案 换端口 QQ邮箱可以把端口换成587 设置属性 spring.mail.properties.mail.smtp.ssl.enable=true 原因 465端口是为SMTPS(SMTP-o ...
- python3练习100题——037
原题链接:http://www.runoob.com/python/python-exercise-example37.html 题目:对10个数进行排序. 程序分析:可以利用选择法,即从后9个比较过 ...
- day01_2spring3
Bean基于XML和基于注解的装配 一.Bean基于XML的装配 1.生命周期接着day01_1来讲(了解) Bean生命周期的如图所示:用红色框起来的都是我们要研究的! 如图Bean is Read ...