2016-02-02 98 views
1

我是一个小菜鸟,所以请好。我搜索谷歌/ stackoverflow /其他地方,并没有找到任何答案,但我不知道,如果我甚至使用正确的条款。使用DataTableReader“datatable”名称的变量

一点背景第一:

我已经作出,其显示在仪表板上的MySQL数据的网页。一切工作正常。

仪表板上的每个“图块”都会在我的aspx页面中使用mysql查询制作的谷歌图表显示不同的数据。每个图块还具有“刷新”按钮,以便能够再次运行查询来更新图表。

刷新按钮具有用于每个图块同一类,但一个唯一的ID:

<input type="button" id="DailyTotal" class="rebind"/> 

点击这个运行的JavaScript函数执行以下操作:

  • 调用的IHttpHandler与AJAX阅读DataTable并检索新的查询数据
  • 将数据格式化为JSON
  • 重绘图表

到目前为止,这一切正常工作。

现在,这里是我的问题:

我如何通过瓷砖的ID随着AJAX调用了IHttpHandler,这样我可以选择正确的查询,以便对代码隐藏运行?

每个图块的ID与相应的DataTable名称相同。

目前我的代码是这样的:

private static DataTable ProgrammingTable(string chart) 
     { 
     var rand = new System.Random(DateTime.Now.Millisecond); 
     var dt = new DataTable(); 

     DataTableReader reader = new DataTableReader(Dashboard.DailyTotal()); 
     try 
     { 
      dt.Load(reader); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
     return dt; 
    } 

有什么办法,我可以使“DailyTotal())”的变量,这样我可以有一段代码这是能够更新每个瓷砖?

我试过这样做,通过使用ASP隐藏字段来传递ID,但我仍然不确定如何构造代码,以便它知道使用该变量的值作为DataTable的名称和不要认为变量名称是DataTable名称。

这就是我想我 ASPX页面上:

<asp:HiddenField ID="ChartID" runat="server" value=""/> 

JS:

var chartName = $(this).attr("id"); 
$("input[id=ChartID]").val(chartName); 

代码隐藏:

 Page page = (Page)HttpContext.Current.Handler; 
     HiddenField ChartID = (HiddenField)page.FindControl("ChartID"); 
     var aa = ChartID.Value; 

然后我试着这样做:

  DataTableReader reader = new DataTableReader(Dashboard.aa()); 

但它显然只是寻找名为aa的DataTable。

我能想到的唯一解决方案是给每个tile自己的ajax调用和iHttpHandler,但显然不是更可取的。

请帮助,请让我知道,如果有什么不清楚。

谢谢。

+0

欢迎来到SO! +1为详细和深思熟虑和记录的问题,并为“noob” - 你的话,而不是我的英勇努力:) –

+0

我想到的问题的标题可能有点误导,或不是真的解决这个问题的关键。我将自己提供一个编辑,但会将这个决定留给你。我会考虑你的真正问题是... 1.使用(jQuery?)ajax调用和ASP.NET WebMethod(?)将字符串从客户端传递到服务器,2.调用基于字符串值的方法。 –

回答

0

我想给你一个更深入的答案,当我有时间时,但我一直在回答你的问题,因为你发布它,只是忙。很快,虽然我会说一种方法是使用switch语句或if/else块根据您从客户端获得的ID调用不同的方法。这是一种暴力破解方法,因此不是很优雅,也不能很好地扩展或适用于可管理的代码。

更好的方法可能是使用反射,因为您的ID与要调用的方法名称相匹配。

我会在有空的时候添加细节,但是您可以开始自己的研究,因为您似乎对自称的noob非常有效。

至于通过asp:HiddenField将ID从客户端传递到服务器,这将无法正常工作,因为需要同步回传才能更新服务器对您在客户端上设置的值的视图。想想隐藏的字段,就像你刚刚写了一封信的邮箱,然后阿贾克斯的电话就像你刚刚打电话给信件的收件人,但邮递员(邮寄回来)甚至没有来接信还没有。这个比喻在那之后开始崩溃,并且不完美,但是希望它可以散发出一些光芒。所以你想要做的就是把ID传给ajax调用本身的服务器。这将成为服务器端方法接收的参数值(chart)。如果您有多个数据片段传递到服务器,则可以将所有数据序列化为JSON,并将单个对象传递到可以反序列化的服务器。再次,我会提供细节和例子,当我有时间和更多的东西,而不仅仅是一个电话来回应。你可以请张贴ajax调用本身的细节,所以我可以尝试定制你的代码的例子?

+0

非常感谢您的回复,我真的很感激:) 我会开始对反射进行一些研究 - 这只是我需要的一种线索。我只是觉得我经常用错误的词汇来找到我所追求的。 这里是JS代码有ajax调用:http://pastebin.com/fMFn7iZN(太大,不适合评论) – Bryan

+0

@Bryan只是想快速回复你的评论。我会尽我所能扩大我的答案。我有些惊讶没有人回复,这是我觉得有必要发布内容的原因之一,即使它现在很模糊。如果你没有回答这个问题,它可能会得到更多的意见,因为人们往往避免回答已经有被接受的答案的问题。我知道你不知道从哪里开始谈论新话题。我应该说,反思不是圣杯,有一个与它相关的性能问题。所以你必须权衡利弊。 –

+0

嗨,Eric,我只是想感谢你指引我朝着正确的方向。我现在通过发送带有ajax调用的字符串并在处理程序中使用IF/ELSE语句来工作。 我真的很感谢帮助。 :) – Bryan