控制器代码如下
public ActionResult Index()
{
//var links = [
// { icon: '/Content/ligerUI/images/3DSMAX.png', title: '人员信息', url: '/UserList/UserTolist' },
var usr = (from x in _DBAction
select new { icon = x.ActionImgUrl, title = x.ActionName, url = x.ActionUrl }).Distinct();
System.Web.Script.Serialization.JavaScriptSerializer json = new System.Web.Script.Serialization.JavaScriptSerializer();
ViewBag.MenData= json.Serialize(usr);
return View();
}
在视图的代码如下
@Html.Raw("var links="+ ViewBag.MenData+";")//
只是我不明白,@Html.Raw 为什么没有输出html标签呢
或者说 "var links="+ ViewBag.MenData+";" 是如何 变成html标签的呢
这里不是标签输出,只是定义JS的一个变量 links
定义了JS一个变量, 也就是说 @Html.Raw 还有输出变量的作用, 不但但只是输出html标签了,
是不是 @Html.Raw 还有把 变量 转换成 标签的作用呢
@zhengyingcan:
它的主要目的是把HTML标签按原意输出,而不是作为内容输出。
如果它输出的内容不是HTML标签,跟直接输出没什么区别,就像你的例子,它跟HTML标签一点关系都没有
@zhengyingcan: 如果放在<script></script>里面,就作为JS输出;如果放在body或某个标签里面,就作为内容输出
@Yu: 也就是html标签 本质上是json, 通过"var links="+ ViewBag.MenData+";" 这种 方式,直接就是json, IE 编译json的速度上 比 html 更快。
所以这种方式更高效。
@Html.Raw 不但可以输出 html标签,还可以输出 购成html标签 json ,可以这样子理解吗,老师
@zhengyingcan: html标签跟json也是一点关系都没有
如果ViewBag.MenData的内容是json,那么这里的意思就是定义一个变量links来接收json数据,如:
var links="{name:'apple',address:'zhuhai'}";
@Yu: 是不是 @Html.Raw("var links="{name:'apple',address:'zhuhai'}")// 这样子也能出结果呢
@zhengyingcan:
可以的,=号后面的"不要