首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将值从ASP.NET传递到外部Javascript脚本

如何将值从ASP.NET传递到外部Javascript脚本
EN

Stack Overflow用户
提问于 2021-02-24 02:21:34
回答 3查看 283关注 0票数 0

我有一组关键绩效指标数据需要从我的ASP.NET项目传递到Javascript文件中。我想我可以使用ViewBag来做到这一点。以下是控制器中的内容:

代码语言:javascript
代码运行次数:0
运行
复制
    public ActionResult KPI()
    {
        if (Session["OrganizationID"] == null)
        {
            return RedirectToAction("Unauthorized", "Home");
        }

        else
        {
            int orgId;
            int.TryParse(Session["OrganizationID"].ToString(), out orgId);
            var user = db.Users.Find(User.Identity.GetUserId());
            var organization = user.Organizations.Where(o => o.OrganizationID == orgId).FirstOrDefault();
            var reports = db.Reports.ToList();

            try
            {
                var org_reports = (from r in reports
                                   where r.OrganizationID == organization.OrganizationID
                                   select r).ToList();                    
                
                var kpi = new KPI(org_reports);
                var jsonKPI = JsonConvert.SerializeObject(kpi);
                ViewBag.orgData = jsonKPI;
            }
            catch (ArgumentNullException e)
            {
                return RedirectToAction("Unauthorized", "Home");
            }
        }
        return View();
    }

在视图中,我尝试使用隐藏值,也只是在调用脚本时将它们作为参数传递:

代码语言:javascript
代码运行次数:0
运行
复制
<input  type="hidden" id="orgData" value=@ViewBag.orgData>

<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript" src="~/Scripts/KPIs.js">
    orgData = @ViewBag.orgData;
</script>

然后,我想在我的JS脚本中读取这个值,并从字符串中将其解析为JSON:

代码语言:javascript
代码运行次数:0
运行
复制
function myFunction(){
   var test1 = JSON.parse(document.getElementById('orgData'); // Doesn't work
   var test2 = JSON.parse(orgData); // Doesn't work
}

这些方法似乎都不起作用。我在这里犯了什么错误?

EN

回答 3

Stack Overflow用户

发布于 2021-02-24 02:54:21

看起来你忘了引号了。

代码语言:javascript
代码运行次数:0
运行
复制
<input  type="hidden" id="orgData" value=@ViewBag.orgData>

应该是

代码语言:javascript
代码运行次数:0
运行
复制
<input  type="hidden" id="orgData" value="@ViewBag.orgData">

另外,script标记中的代码永远不会被执行,因为script标记上有一个src属性。带有src属性的脚本标记中的代码永远不会被执行。

代码语言:javascript
代码运行次数:0
运行
复制
<script type="text/javascript" src="~/Scripts/KPIs.js">
    orgData = @ViewBag.orgData;
</script>

应更改为

代码语言:javascript
代码运行次数:0
运行
复制
<script type="text/javascript" src="~/Scripts/KPIs.js" />
<script>
    orgData = @ViewBag.orgData;
</script>
票数 0
EN

Stack Overflow用户

发布于 2021-02-24 03:17:34

您应该使用Html.Raw,以避免ASP.NET转义您的值:

代码语言:javascript
代码运行次数:0
运行
复制
orgData = @Html.Raw(ViewBag.orgData);

另外,如果这是一个Json,那么它也是一个有效的JS对象,所以您不需要解析,它已经是一个JS对象了。

票数 0
EN

Stack Overflow用户

发布于 2021-02-24 04:52:32

我解决了!通过视图传递KPI模型,然后就像下面这样简单:

代码语言:javascript
代码运行次数:0
运行
复制
var orgData = @Html.Raw(Json.Encode(Model));

感谢所有人提供的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66338929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档