我有一组关键绩效指标数据需要从我的ASP.NET项目传递到Javascript文件中。我想我可以使用ViewBag来做到这一点。以下是控制器中的内容:
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();
}
在视图中,我尝试使用隐藏值,也只是在调用脚本时将它们作为参数传递:
<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:
function myFunction(){
var test1 = JSON.parse(document.getElementById('orgData'); // Doesn't work
var test2 = JSON.parse(orgData); // Doesn't work
}
这些方法似乎都不起作用。我在这里犯了什么错误?
发布于 2021-02-24 02:54:21
看起来你忘了引号了。
<input type="hidden" id="orgData" value=@ViewBag.orgData>
应该是
<input type="hidden" id="orgData" value="@ViewBag.orgData">
另外,script标记中的代码永远不会被执行,因为script标记上有一个src属性。带有src属性的脚本标记中的代码永远不会被执行。
<script type="text/javascript" src="~/Scripts/KPIs.js">
orgData = @ViewBag.orgData;
</script>
应更改为
<script type="text/javascript" src="~/Scripts/KPIs.js" />
<script>
orgData = @ViewBag.orgData;
</script>
发布于 2021-02-24 03:17:34
您应该使用Html.Raw,以避免ASP.NET转义您的值:
orgData = @Html.Raw(ViewBag.orgData);
另外,如果这是一个Json,那么它也是一个有效的JS对象,所以您不需要解析,它已经是一个JS对象了。
发布于 2021-02-24 04:52:32
我解决了!通过视图传递KPI模型,然后就像下面这样简单:
var orgData = @Html.Raw(Json.Encode(Model));
感谢所有人提供的帮助。
https://stackoverflow.com/questions/66338929
复制相似问题