Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从服务器脚本(ASP.NET)传递JavaScript变量名和值_Javascript_Asp.net_Dom_Code Generation - Fatal编程技术网

从服务器脚本(ASP.NET)传递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 %>' ,'<%#

有什么好方法可以处理这种混乱、不必要且不是真正动态生成的JavaScript:

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
我已经提出了一些解决上述问题的想法(声明一个全局“应用程序”对象,jQuery+在DOM元素上声明类),但我想听听更多关于这方面的想法

您询问的是代码气味,因此我想代码模糊的情况是合适的。例如,BusinessChart的交易是什么。这里有很多我们不知道的东西。但我闻到的是: 只有你提到的第一个问题对我来说很难闻。很奇怪,必须在服务器上指定。我想这可能是有原因的,但我很难想象。至于变量CurrentUserID,很可能有很好的理由。例如,可能BusinessChart会根据用户的角色对不同的数据进行筛选

至于GetBaseUrl和ResolvUrl,这也可能是合法的。BusinessChart可能需要一个完全限定的URL,而GetBaseUrl/ResolveUrl是提供该URL的中心位置,因此您只需要在一个位置进行配置更改。为什么不使用web.config引用呢?Errrr,可能有多个web应用程序或部署使用这些路径,Helper类从公共数据库获取这些URL,为多个应用程序或部署提供一个公共配置位置

至于使用代码隐藏。有时这是必要的。虽然像这样的动态代码通常是不必要的,但有时复杂的代码会达到最大的总体简单性


正如您所看到的,我试图让现有代码受益于怀疑。然而,正如您所怀疑的,如果发现示例中的所有动态代码确实毫无用处,我也不会感到惊讶。我想说你的嗅觉似乎很好!而且你提到的第一个问题闻起来最糟糕。

也许你应该更多地关注数据驱动的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;
}