从服务器脚本(ASP.NET)传递JavaScript变量名和值
有什么好方法可以处理这种混乱、不必要且不是真正动态生成的JavaScript:从服务器脚本(ASP.NET)传递JavaScript变量名和值,javascript,asp.net,dom,code-generation,Javascript,Asp.net,Dom,Code Generation,有什么好方法可以处理这种混乱、不必要且不是真正动态生成的JavaScript: var <%# JavascriptId %> = new BusinessChart( '<%# JavascriptId %>',<%# CurrentUserId %>,'<%# ChartId %>' ,'<%# Helper.GetBaseUrl() %>','<%# ChartPath %>' ,'<%#
var <%# JavascriptId %> = new BusinessChart(
'<%# JavascriptId %>',<%# CurrentUserId %>,'<%# ChartId %>'
,'<%# Helper.GetBaseUrl() %>','<%# ChartPath %>'
,'<%# Helper.ResolveUrl("~", true) %>'
);
<%# JavascriptId %>.Init();
var=新业务图表(
'',,''
,'',''
,''
);
.Init();
我发现了这个,但答案似乎并没有说明气味的来源
我看到一些具体问题:
- JavascriptId是一个变量名。为什么我要在服务器端定义客户端变量名
- CurrentUserId对于用户来说永远不会更改。。。这是他们的用户ID。GetBaseUrl()和ResolveUrl(“~”)的用户ID相同。。。我为什么要到处传递常数
- 我必须打开aspx.cs代码隐藏文件来调试东西,不能使用Intellisense
正如您所看到的,我试图让现有代码受益于怀疑。然而,正如您所怀疑的,如果发现示例中的所有动态代码确实毫无用处,我也不会感到惊讶。我想说你的嗅觉似乎很好!而且你提到的第一个问题闻起来最糟糕。也许你应该更多地关注数据驱动的JavaScript。将数据存储为JSON,并让代码执行“代码”操作:
//这是动态数据部分
var图表=[{
Id:“”,
用户ID:,
ChartId:“”,
BaseUrl:“”,
图表路径:“”,
主路径:“”
}];
//这只是可以存储起来的代码
//在应用程序的静态javascript中
函数初始化图(数据){
var图表=新业务图表(
data.Id,data.UserId,data.ChartId,
data.BaseUrl、data.ChartPath、data.HomePath);
char.Init();
收益表;
}
更好的是,不用将其放入HTML文件中,而是编写一个REST请求处理程序来返回此JSON
现在,您已经非常接近AJAX应用程序了。您的JSON请求处理程序就是我处理这个问题的方式,是的,我们的方向肯定会分解为使用数据驱动JS对象的静态JS代码。谢谢
// This is the dynamic data part
var charts = [{
Id: '<%# JavascriptId %>',
UserId: <%# CurrentUserId %>,
ChartId: '<%# ChartId %>',
BaseUrl: '<%# Helper.GetBaseUrl() %>',
ChartPath: '<%# ChartPath %>',
HomePath: '<%# Helper.ResolveUrl("~", true) %>'
}];
// This is just code that can be stored away
// in the application's static javascript
function initChart(data) {
var chart = new BusinessChart(
data.Id, data.UserId, data.ChartId,
data.BaseUrl, data.ChartPath, data.HomePath);
char.Init();
return chart;
}