html文本转化为html格式显示的问题
在使用.net MVC,时,razor渲染可以帮助我们使用@value来将value的值加载到html文本中,但是,它是严格的字符串显示,即,如果value是“hello world”,他会将Hello world 替换到@value的位置。
这个严格替换一定要注意。
它带来的问题是,当我们在javascript中使用它的值时,var str=@value; 在解析或会变成var str=hello world,很明显,和普通的变量不同,他不会自动添加双引号,这样语法上是有问题的,执行时,javascript会报错。
进一步,我们对它手动添加双引号var str="@value";当替换后,理论上是var str="@value"; 这样没问题,但是如果这个一个标签字符串则行不通,因为,会报错:字符串常量没有终止符,
为什么呢?因为手动加的双引号是不能跨行的,而带html标签的字符串,标签中是有自动换行这种格式控制的,所以这样做并不安全,不健壮。
显示html字符串,我们通常可以使用
1.document.write(value);
2.$("#table_div").html(value);
但是@value作为参数传入,他不是一个字符串,所以会报语法错误,怎么正确输出一个html标签呢,下面是研究出来的解决方法
使用隐藏标签<input id="hidden_table" type="hidden" value="@value" />
var str=$("hidden_table").val();
$("#table_div").html(str);
这样就可以将字符串转化为html啦。
(使用document.write和$("#element").html只要传入html标签的文本就能正确解析,但是注意如果是@razor需要将@razor转化为字符串格式)