Asp.net MVC 3中Session与ViewBag传值到Js中
asp.net mvc 3 中session与viewbag传值到javascript中, 主要方法有:
1. 使用javascript variable
假设有say _layout.cshtml
<head>
...
<link href="@url.content("~/content/site.css")" rel="stylesheet" type="text/css" />
@rendersection("my_script_variables", false)
<script src="@url.content("~/scripts/external.js")" type="text/javascript"></script>
...
</head>
增加到你的view:
@section my_script_variables {
<script type="text/javascript">
var variable1 = '@myvar1', variable2 = '@session["myvar2"]', variable3 = '@viewbag.myvar3';
</script>
}
假设你有这样的value:
@{ string myvar1 = "first"; session["myvar2"] = "second"; viewbag.myvar3 = "third"; }
在外部的js文件中,你到得来first second third的alert消息。
alert(variable1 + ' ' +variable2 +' '+ variable3);
2.使用controller的特性
可以放一个参数到你的控件
<input type="hidden" value="@session["myvar2"]" id="myhiddenvar" />
然后
alert($('#myhiddenvar').val());
也可以使用data特性:
<a id="mylink" data-variable1="@myvar1" data-variable2="@session["myvar2"]" data-variable3="@viewbag.myvar3">
test</a>
然后在外面引用的js中:
$('#mylink').click(function () {
alert($(this).data('variable1')+' ' +$(this).data('variable2')+'
'+$(this).data('variable3')); }
);
我们得到同样的结果
3.razorjs
你可以从nuget安装它. 它允许你写razor风格的c#代码在js文件中。
view:
@{
string var1 = "first"; session["var2"] = "second";
viewbag.var3 = "third";
dictionary<string, string> test1 = new dictionary<string, string>();
test1.add("var1", var1);
test1.add("var2", session["var2"].tostring());
test1.add("var3", viewbag.var3);
}
@html.razorjsinline("~/scripts/external.js", test1);
然后在外部的external.js中:
@{
var myobj = (dictionary<string, string>)model;
}
alert( +' '+ ' );
最后还是同样的结果。
希望对你web开发有帮助。
作者:petter liu