昨天介绍了一些Razor的基本语法,几天接着向下说:

补成一个,上次介绍了怎么输出原样的文本,用<text></text>标签,下面再介绍一种语法:

@{@:我爱北京}  这个@:我爱北京必须写在@{}C#代码段中,否则报错

1.输出@符号怎么做?

在Razor中,我们用@@输出”@”,类似于C#中”//”

2.我们可以在Razor使用Response.Write(),Server,Request,Session,这是为什么呢?

我们反编译.cshtml,生成一个前台类,这个类继承了WebViewPage<object>

我们在前台类中没有看到Session、Server等等属性,那么去找它的父类WebViewPage<object>,父类也没找到,再找父类的父类,一次类推,终于在

WebPageRenderingBase类中找到了,它在里面定义了我们想要的属性。

3.如何在Razor视图里定义方法?

我们在这里使用:

@helper Hello(string a){
<span>我爱北京天安门 @a</span>
}
@Hello("天安门上太阳升")

上文我介绍过,视图会编译成一个前台类,这个类有一个Execute()方法,会将视图上的静态内容和C#代码进行字符串拼接,如果我在视图上定义方法,岂不是在方法中定义方法吗?这是一个疑问,那么我们通过反编译来解决这些疑问。

我们从上图上可以看到我们在视图中定义的Hello方法,返回值是HelperResult,这里我们可以知道只要你在视图上定义的方法返回值都是HelperResult类.所以这里就不存在在方法中定义方法了。

现在又有一个疑问了,我们采用Mvc模式的原因是为了让UI与业务分离开来,你又在UI中定义业务这不是多次一举吗?

解释:我们一般不在视图上定义方法,定义方法的目的是为了解决视图上要重复输出Html代码的情况,比如说我现在要在视图上不同位置多次输出<span>我爱北京天安门</span>,因为位置不同不能用for循环,多次写对程序员有负担,这里就用到了我们定义的方法了。

4.在一个视图上请求另一个视图

假设我们在Home控制器下的Index方法有一个Index.cshtml视图,现在我要在Index视图上请求Home控制器的一个Check.cshtml视图。

那么这就用到了

//在视图中调用 无返回值的方法必须使用代码段@{}
@{Html.RenderPartial("check");} //调用其他视图文件下的视图
@{Html.RenderPartial("~/Views/Dept/Index.cshtml");} //想将当前视图的数据传递到check视图上
可以使用ViewBag、ViewData、TempData等
@{
ViewBag.CName="你好啊";
Html.RenderPartial("check");
}

在视图中调用 有返回值 的方法不需要加@{},由此可以看出@后直接跟变量 或 带返回值的方法,会直接在此输出 变量内容 或方法返回值

@Html.TextBox("txtname")

与之对应的还有一个方法就是@{Html.RenderAction(“check“);}

从上面两个图可以看出他们都能从一个视图上请求另一个视图,但是两个请求的方式并不一样,使用RenderPartial方法我在Index视图上直接请求check.cshtml,而RenderAction是去请求/home/check ,两个的方式不同。

但是你查看网页源代码的时候会发现请求的视图中含有

这样不是很友好。

下次我将介绍分布视图。

希望各位看官批评指正

ASP.NET MVC Razor视图(2)的更多相关文章

  1. Asp.net MVC Razor视图模版动态渲染PDF,Razor模版生成静态Html

    Asp.net MVC Razor视图模版动态渲染PDF,Razor模版生成静态Html 1.前言 上一篇文章我开源了轮子,Asp.net Core 3.1 Razor视图模版动态渲染PDF,然后,很 ...

  2. ASP.NET MVC Razor视图引擎攻略

    --引子 看下面一段MVC 2.0的代码. <%if (Model != null){%> <p><%=Model%></p><%}%>&l ...

  3. ASP.NET Mvc Razor视图语法

    在ASP.NET MVC中有两套模版引擎,一套是ASPX,一套是Razor,从事过WebForms开发的朋友们,对于ASPX模版已经很熟悉了,下面我说一下我所熟悉的Razor模版引擎的一些语法,供大家 ...

  4. MvcMailer通过ASP.NET MVC Razor视图和基架发送邮件

    MvcMailer是一个有趣的组件,您可以使用ASP.NET MVC框架在发送邮件.很重要的是,它使用Razor视图引擎的观点作为电子邮件模板和很容易安装和使用.在本文中你将看到如何安装,设置邮件模板 ...

  5. ASP.NET MVC——Razor视图引擎

    Razor是MVC框架视图引擎,我们今天就来说一说Razor视图引擎. 首先还是来创建一个基础项目叫Razor来演示. 先来定义一个Model叫Product public class Product ...

  6. Asp.Net MVC Razor视图引擎与My97DatePicker插件的结合

    using System; using System.Collections.Generic; using System.Runtime.CompilerServices; using System. ...

  7. 体验 ASP.NET Core 1.1 中预编译 MVC Razor 视图

    这是从 ASP.NET Core 1.1 官方发布博文中学到的一招,可以在 dontet publish 时将 Razor 视图编译为 .dll 文件. 需要在 project.json 中添加如下配 ...

  8. ASP.NET MVC 5 - 视图

    在本节中,你要去修改HelloWorldController类,使用视图模板文件,在干净利索地封装的过程中:客户端浏览器生成HTML. 您将创建一个视图模板文件,其中使用了ASP.NET MVC 3所 ...

  9. ASP.NET MVC Razor语法

    ASP.NET MVC Razor语法 (一) 关于_ViewStart.cshtml文件     使用Razor模板引擎的话,会自动生成一个_ViewStart.cshtml文件.事实上,_View ...

随机推荐

  1. 为ListView添加头和脚

      转自:https://software.intel.com/zh-cn/blogs/2014/12/15/android-listview-addheaderview-addfooterview ...

  2. iOS安全攻防

    iOS安全攻防 http://www.docin.com/p-760264769.html

  3. 局域网内sqldeveloper客户端连接oracle服务器

    1:输入参数 输入连接名(随便写) 用户名:system/tiger/sys或者是创建的用户 口令:设置的口令 主机名:连接的数据库所在的ip 端口:默认是1521 sid:orcl安装时自己设置的 ...

  4. 关于JFace中的TableViewer和TreeViewer中的

    TableViewer类 构造方法摘要: 方法摘要: 在做的这几个练习中,发现,getTable(),refresh(),remove(),setSelection()方法经常使用. TreeView ...

  5. css3渐变、背景、倒影、变形

    一.背景切割background-clip 语法:background-clip:border-box | padding-box | content-box: border-box      超出b ...

  6. Map集合的两种遍历方式

    Map集合:即 接口Map<K,V> map集合的两种取出方式:    1.Set<k> keyset: 将map中所有的键存入到set集合(即将所有的key值存入到set中) ...

  7. 【转】MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    [转]MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据, ...

  8. 存储结构中的对齐(alignment)

    最近,在测试基于ceph的小文件合并方案(见上个博文)时,遇到一个怪异的现象:将librados提供的append接口与我们封装的WriteFullObj接口(osd端是append操作和kvdb的p ...

  9. LINQ to Entities 不支持 LINQ 表达式节点类型“Invoke”

    解决方法即 where后加 .Compile()

  10. WindowManage与Window的在Activity的一点小应用

    super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN ...