我是js的新手,现在正试图将HTML5 AJAX File Uploader Module集成到我的ASP.NET MVC项目中。
在我的项目中,有ViewBag.UserID
,在视图中我使用模块中的脚本:
<script type="text/javascript" data-main="/scripts/main" src="/Scripts/require.js"></script>
我想我可以使用上面的脚本将UserID
传递给main.js
,这样我就可以使用类似
var UserID;
html5Upload.initialize({
// URL that handles uploaded files
uploadUrl: '/file/upload?Userid=' + UserID,
...
});
但是......我该怎样做才能实现这个目标?
答案 0 :(得分:1)
您可以使用一些引导代码将服务器端全局变量集成到您的javascript中。 E.g:
<script>
(function(myNamespace) {
"use strict";
myNamespace.UserInfo = {
UserID: '@ViewBag.UserID' // injects viewbag info into javascript
};
}(window.myNamespace = window.myNamespace || {}));
</script>
现在,您拥有的任何javascript都可以访问全局myNamespace
变量的UserInfo
属性,该属性包含viewbag数据。例如:
uploadUrl: '/file/upload?Userid=' + myNamespace.UserInfo.UserID,
答案 1 :(得分:1)
@Jeroen的建议是完全正确的。但是,这里的另一种方法可能对您的目的而言过于苛刻,但您也可以在许多其他地方使用它:SuperScript是一个允许您在服务器中声明例如JavaScript变量的库这些代码并将发出的变量发送到输出网页,无论你喜欢什么。
所以在你的情况下,你可以有像
这样的东西SuperScript.JavaScript.Declarations.AddVariable(opt => opt.EmitterKey("javascript")
.Name("user_id")
.Value(UserID));
在您的Razor视图/ _layout
上@SuperScript.Declarations.EmitFor("javascript")
哪会写出来
var user_id = "..."; // the string value of UserID
除了此解决方案背后的可扩展性之外,它还允许您避免ViewBag属性不存在的共享视图中的错误,并提供一种方法,可以轻松地将值/对象从代码移动到前端。
免责声明:我是SuperScript的开发者之一。