码迷,mamicode.com
首页 > Web开发 > 详细

Razor中HtmlEncodeString和Raw方法

时间:2015-06-13 17:06:44      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

HtmlEncodeString和Raw的使用

1,RazorTest类:

public static HtmlEncodedString Test1() { //HtmlEncodedString对字符串做了htmlencode,比如将将 < 转义成&lt; return new HtmlEncodedString("<input type=‘text‘ value=‘请输入‘/>"); } public static RawString Test2() { return new RawString("<input type=‘text‘/>"
);
        }

2,在cshtml文件调用这两个方法

<body>

   @RazorTest.Test1()
<br />

    @RazorTest.Test2()
<br /> </body>

3,结果

查看页面:技术分享

源代码:技术分享

 

结论:

htmlEncodeString将字符串进行了htmlEncode

RawString则原样输出了字符串


注意:@后的表达式是字符串,会被直接htmlEncode

例1:

1,RazorTest中Test3()

public static String Test3()
        { 
            return "<input type=‘text‘/>";
        }

2,cshtml中调用Test3()

<body>

@RazorTest.Test3()

</body>

3,结果

查看页面:技术分享

HTML源代码:技术分享

 

 

 

例2:

1,ashx.cs代码:

string html = RazorHelper.ParseRazor(context, @"~/Razordemo/Razor2.cshtml", new { Gender=gender,Name="C#泛型的使用List<T>"});

2,cshtml代码:

<body>
@Model.Name <br />
</body>

查看页面: 技术分享

HTML源代码: 技术分享

然而,我要改变!

如果不想被htmlEncode,就要将Model.Name原样输出呢?

RawString类:顾名思义可以将原始字符串,也就是说会将输入的代码,原样输出到HTML中。

可以自己封装一个返回值为RawString类型的方法,把Name传进来,返回一个RawString对象即可。

例3:

封装一个返回值为RawString类型的方法HtmlToRaw

public static RawString HtmlToRaw(string html) { return new
 RawString(html);
        }

1,ashx.cs代码:

string html = RazorHelper.ParseRazor(context, @"~/Razordemo/Razor2.cshtml", new {Html="<span style=‘background-color:yellow‘>这里是魔都</span>"});

 

2,cshtml代码:

<body>


 @RazorTest.HtmlToRaw(Model.Html)

</body>

3,结果

查看页面:技术分享

HTML源代码:技术分享

 

上面我们知道了,

HtmlEncodeString可以将字符串转换为HTML编码(如:< 转换为 &lt;)

RawString可以将字符串原样输出(如:<span style=”background-color: yellow”>原样输出到HTML)

下面对HtmlEncodeStringRawString做个对比

1,HtmlEncodeString的定义:

public class HtmlEncodedString : IEncodedString
    {
        public HtmlEncodedString(string value);

        public string ToEncodedString();
        public override string ToString();
    }

2,RawString转向定义的样子:

public class RawString : IEncodedString
    {
        public RawString(string value);

        public string ToEncodedString();
        public override string ToString();
    }

从定义可以看到,两者均继承自IEncodedString接口,都有ToEncodedString()方法

测试发现,调用RawString类的ToEncodedString()方法,跟调用返回值HtmlEncodedString类型的方法结果是一样一样的,会将字符串HtmlEncode

例:

1,RawString类的ToEncodedString方法

public static string HtmlToEncode(string html)
        {
            return new RawString(html).ToEncodedString();
        }

2,cshtml页面调用

<body>

@RazorTest.HtmlToEncode(Model.Html)

</body>

结果:

查看页面:技术分享

HTML源代码:技术分享

不过,调用RawString类的ToEncodedString方法来htmlEncode有点麻烦,还是直接使用HhtmlEncodeString类来htmlEncode方便。

Razor中HtmlEncodeString和Raw方法

标签:

原文地址:http://www.cnblogs.com/sean100/p/4573659.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!