你如何使用Javascript和Razor编写干净的代码
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了你如何使用Javascript和Razor编写干净的代码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2995字,纯文字阅读大概需要5分钟。
内容图文
我正在编写ASP.Net MVC页面,我正在使用服务器中的数据来创建Google图表. x轴是日期. y轴是值.绘制了2行数据进行比较.这是相关代码:
@model IEnumerable<Tuple<DateTime,int,int>>
<div id="chart_div_2" style="width: 900px; height: 500px;"></div>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", { packages: ["corechart"] });
google.setOnLoadCallback(drawChart);
function drawChart() {
var arr = [['Year', 'Sales', 'Expenses']];
//Using the Razor Model to create a Javascript array.
var arr2 = [
@foreach(var row in Model)
{
@:["@row.Item1.ToString("MMM d")", @row.Item2, @row.Item3],
}
];
for (var i = 0; i < arr2.length; i++)
{
arr.push(arr2[i]);
}
var data = google.visualization.arrayToDataTable(arr);
var chart = new google.visualization.LineChart(document.getElementById('chart_div_2'));
chart.draw(data);
}
</script>
首先,这段代码确实有效.以这种方式创建arr2确实会将Razor模型变成我可以使用的东西.但是,我的鼻子说代码味道.它说将两种语言razor和Javascript放在一起,它们有一些类似的基于C语言的编程流语法可能会让下一个出现并试图阅读它的人感到困惑.
有没有更好的方法来写这个?
解决方法:
However, my nose says code smell.
哦,是的,它很臭,我能感觉到它.
Is there a better way to write this?
当然.永远不要手动构建JSON,就像混合2种语言并编写循环和东西一样.使用JSON序列化程序:
@model IEnumerable<Tuple<DateTime,int,int>>
<div id="chart_div_2" style="width: 900px; height: 500px;"></div>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", { packages: ["corechart"] });
google.setOnLoadCallback(drawChart);
function drawChart() {
var arr = @Html.Raw(
Json.Encode(
new object[] { new[] { "Year", "Sales", "Expenses" } }
.Concat(
Model.Select(x => new object[]
{
x.Item1.ToString("MMM d"),
x.Item2,
x.Item3
})
)
)
);
var data = google.visualization.arrayToDataTable(arr);
var chart = new google.visualization.LineChart(document.getElementById('chart_div_2'));
chart.draw(data);
}
</script>
这将生成与您相??同的代码标记,但整个模型操作和编码在服务器上完成.您还可以编写自定义HTML帮助程序,以便将代码简化为:
public static class ChartExtensions
{
public static IHtmlString ToChartData(
this IEnumerable<Tuple<DateTime, int, int>> model,
params string[] titles
)
{
return new HtmlString(
Json.Encode(
new object[] { titles }
.Concat(
model.Select(x => new object[]
{
x.Item1.ToString("MMM d"),
x.Item2,
x.Item3
})
)
)
);
}
}
然后在你看来:
@model IEnumerable<Tuple<DateTime,int,int>>
<div id="chart_div_2" style="width: 900px; height: 500px;"></div>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", { packages: ["corechart"] });
google.setOnLoadCallback(drawChart);
function drawChart() {
var arr = @Model.ToChartData("Year", "Sales", "Expenses");
var data = google.visualization.arrayToDataTable(arr);
var chart = new google.visualization.LineChart(document.getElementById('chart_div_2'));
chart.draw(data);
}
</script>
内容总结
以上是互联网集市为您收集整理的你如何使用Javascript和Razor编写干净的代码全部内容,希望文章能够帮你解决你如何使用Javascript和Razor编写干净的代码所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。