先看一段代码(只是为了说明问题用,没任何意义)吧:
代码一:
1 <div>
2 for(int i=0;i<3;i++)Repeater
嵌套repeater输出不规则列表
3 {
4 </div>i<div>
5 for(int j=0;j<3;j++)
6 {
7 if(j==1)
8 {
9 <div>
10 for(int k=0;k<5;k++)
11 {
12 k++;
13 <span>
14 k
15 </span>
16 }
17 </div>
18 break;
19 }
20 }
21 }
22 </div>
这一段代码没添加任何@标记,肯定是有问题的,你能准确地判断出这段代码中哪些地方要添加@标记吗?看到这里,停几分钟,填上你的答案吧:),然后把你的答案跟下面的参考答案做个对比吧,如果你很确定地完成了并且完全正确,那么恭喜你,这个知识点你已经掌握了,下面的内容你可以直接跳过了。
参考答案:
1 <div>
2 @for(int i=0;i<3;i++)
3 {
4 @:</div>@i<div>
5 for(int j=0;j<3;j++)
6 {
7 if(j==1)
8 {
9 <div>
10 @for(int k=0;k<5;k++)
11 {
12 k++;
13 <span>
14 @k
15 </span>
16 }
17 </div>
18 break;
19 }
20 }
21 }
22 </div>
Razor语法中有block(块)的说法,这个大家应该都不陌生了,就是代码段,如我们可以把using(){}包起来的代码叫一个block(段/块),block内部还可以有block,这个是可以嵌套的。比如上面的示例代码中我们可以把最外层的for循环内部的代码(第2行到第21行)是一个block,第4行是一个代码块,第二个for循环内部的代码(第5行到第20行)也可以叫一个block,划分不是固定的,粒度你可以自己定义。
block内部的代码分为两种,一种是HTML代码块,一种是C#(本例中为C#,也可以是其他.NET语言)代码块。有了block的概念后,Razor中@标记的规则就是:
如果同一种代码块(HTML代码块不需要加@,这里排除开)内部跟的是同类代码块,这时不需要加@标记,否则要加@标记
用这个规则逐一解析一下上面的代码,在解析之前我的block划分是这样的:
第1—22行,2—21行,第4行,5—20行,7—19行,9—17行,10—16行,12行,13—15行,14行
我们从里往外看,第14行外层block是HTML代码,所以第14行要加@,12行外层block也是C#代码块,因此不加,以此类推,直到第5行,这一行有点特殊,这个涉及到VS中的标签匹配。
我们知道VS能在编码时对HTML标签进行匹配,这个匹配只是给出警告,并不是强制的,用了Razor后,混在C#(也可以是其他语言)中的HTML标签也要进行匹配,只是这个匹配是在代码块内部进行的,同时也是野蛮的,如果不匹配就会出错,例如下面的代码是通不过的:
1 <div>
2 <tr>
3 @if(true)
4 {
5 </tr>
6 }
7 </div>
改为这样就好了:
1 <div>
2 <tr>
3 @if(true)
4 {
5 <tr></tr>
6 }
7 </div>
那么如果遇到像最开始那段代码</div><div>这样进行拼接的HTML怎么办呢,Razor提供了两种方案,一是在前面加上“@:”,如 @:</div><div>;一是用@Html.Raw,如:@Html.Raw("</div><div>");
了解了这点后代码一第4行就应该这样:@:</div>@i<div>,第4行没问题了,最后只剩第5行了,这时直接把第4行忽略,按规则写就OK了,因为第2行是C#代码块,因此第5行不需要添加@。
好了,写到这里只剩最后一个点了,如果把代码一中第4行改为<div>i</div>,那么第5行应该是什么样的呢?如果Razor内HTML标签是匹配的,Razor可以识别,这时可以忽略匹配的HTML标签对即可。
分享到:
相关推荐
在ASP.NET MVC4中,路由系统是URL到控制器方法映射的关键部分,允许开发者自定义URL结构,提高用户体验和搜索引擎优化。此外,ASP.NET MVC4引入了azor视图引擎,这是一种轻量级、高性能的模板引擎,用于生成HTML响应...
2. ** Razor视图引擎**:Razor视图引擎是ASP.NET MVC中的默认视图引擎,它使用简洁的语法来嵌入C#代码于HTML中,使得视图的创建更加高效。 3. ** Areas**:Areas功能允许在大型应用中组织和分隔代码,形成多个独立...
7. **Oxite项目**:在提供的文件列表中,"Oxite"可能是一个示例或教程项目,它是一个小型的开源博客引擎,用于演示ASP.NET MVC的功能和最佳实践。通过分析Oxite的源代码,学习者可以更直观地了解MVC模式在实际项目中...
ASP.NET MVC4支持Razor视图引擎,它提供了一种简洁、高效的语法来创建HTML输出。视图通常根据控制器传递的数据进行渲染,实现了数据和展示的分离。 3. **控制器(Controller)**:控制器处理来自用户的请求,并决定...
本指南将深入探讨ASP.NET MVC4的各个方面,帮助你成为一名熟练的ASP.NET MVC4开发者。 首先,我们要理解MVC模式的基本概念。模型(Model)是应用程序的核心,负责处理业务逻辑和数据管理。视图(View)是用户界面,...
1. **Razor视图引擎**:ASP.NET MVC 3引入了Razor视图引擎,它的语法简洁且直观,与HTML更加融合,降低了视图模板的复杂性。 2. **改进的依赖注入**:支持自动注册和配置依赖注入容器,使得第三方框架如Unity或...
《ASP.NET MVC 4 开发指南》共分11章,第1章讲解通用的MVC特性,第2章讲述正确的开发观念,第3章以一个简单的例子带领读者快速上手ASP.NETMVC,第4~8章分别介绍了ASP.NETMVC最重要的核心观念与技术解析,其中包括...
3. **Entity Framework**:ASP.NET MVC5通常配合Entity Framework使用,这是一个ORM(对象关系映射)工具,可以方便地操作数据库,减少对SQL的直接依赖。 4. **依赖注入**:支持依赖注入(Dependency Injection,DI...
总的来说,《ASP.NET MVC 5高级编程 第5版》是一本全面且深入的指南,涵盖了从基础到高级的各个方面,适合有经验的ASP.NET开发者进一步提升技能,也适合作为初学者入门ASP.NET MVC 5的参考书籍。通过阅读此书,读者...
本书"ASP.NET MVC网站编程案例精解"是针对这一技术的详细指南,适合初学者和有一定经验的开发者学习。 在ASP.NET MVC框架中,模型(Model)负责处理应用程序的数据和业务逻辑,视图(View)则用于展示数据,而控制...
《ASP.NET MVC 4 开发指南》共分11章,第1章讲解通用的MVC特性,第2章讲述正确的开发观念,第3章以一个简单的例子带领读者快速上手ASP.NETMVC,第4~8章分别介绍了ASP.NETMVC最重要的核心观念与技术解析,其中包括...
根据提供的文件信息,我们将深入探讨《精通Asp.Net MVC 第五版英文版》这一书籍中的核心知识点和技术要点。虽然原始内容并未提供具体章节或详细信息,但基于书名及其描述,我们可以合理推测并总结出与Asp.Net MVC ...
《ASP.NET MVC 4 开发指南》共分11章,第1章讲解通用的MVC特性,第2章讲述正确的开发观念,第3章以一个简单的例子带领读者快速上手ASP.NETMVC,第4~8章分别介绍了ASP.NETMVC最重要的核心观念与技术解析,其中包括...
在“微软开源ASP.NET MVC项目”中,我们可以推测这可能是一个示例或模板项目,用于展示如何使用ASP.NET MVC框架来开发Web应用。这个项目可能是微软为了促进开发者对ASP.NET MVC的理解和使用而提供的资源。"Oxite...
自2009年首次发布以来,**ASP.NET MVC**技术迅速发展,**MVC 3**作为2011年发布的最新版本,包含了许多重要的改进和新特性,例如对**Razor视图引擎**的支持,增强了对**HTML5**和**CSS3**的支持等。 #### 三、...
3. **路由系统**:阐述ASP.NET MVC中的URL路由规则,如何定义和使用自定义路由。 4. **模型绑定**:讨论模型绑定如何自动将HTTP请求数据映射到模型对象,简化数据验证和处理过程。 5. **控制器**:讲解控制器的...
《Pro ASP.NET MVC Framework》是ASP.NET MVC框架的权威指南,尤其对于想要深入理解这一框架的开发者来说,这本书是不可或缺的资源。ASP.NET MVC是一种基于模型-视图-控制器(Model-View-Controller,MVC)设计模式...