使用变量作为数据表读取器“数据表”名称
本文关键字:数据表 名称 读取 变量 | 更新日期: 2023-09-27 18:32:52
我有点菜鸟,所以请友善。我已经搜索了google/stackoverflow/其他任何地方,但没有找到任何答案,但我不确定我是否使用了正确的术语。
先介绍一下背景:
我制作了一个在仪表板上显示mysql数据的网页。一切正常。
仪表板上的每个"磁贴"都有不同的数据,在我的aspx页面中使用mysql查询制作的谷歌图表显示。每个磁贴还有一个"刷新"按钮,以便能够再次运行查询以更新图表。
刷新按钮对于每个磁贴具有相同的类,但具有唯一的 ID:
<input type="button" id="DailyTotal" class="rebind"/>
单击此按钮将运行执行以下操作的 javascript 函数:
- 使用 AJAX 调用 iHttpHandler 以读取数据表并检索新的查询数据
- 将数据格式化为 JSON
- 重绘图表
到目前为止,这一切都正常工作。
现在这是我的问题:
如何将磁贴的 ID 以及 AJAX 调用传递给 iHttpHandler,以便我可以选择要在代码隐藏上运行的正确查询?
每个磁贴的 ID 与相应的数据表同名。
目前我的代码是这样的:
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 来执行此操作,但我仍然不确定如何构建代码,以便它知道使用变量的值作为数据表的名称,而不是认为变量名称是数据表名称。
这是我在我的身上尝试过的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 的数据表。
我能想到的唯一解决方案是为每个磁贴提供自己的 ajax 调用和 iHttpHandler,但这显然不是可取的。
请帮忙,如果有什么不清楚的地方,请告诉我。
谢谢。
时间的时候,我想给你一个更深入的答案,但自从你发布问题以来,我一直想回答你的问题,只是很忙。 很快,我会说一种方法是使用 switch 语句或 if/else 块根据您从客户端获得的 ID 调用不同的方法。 这是一种蛮力方法,因此不是很优雅,也不能很好地扩展或适合可管理的代码。
更好的方法可能是使用反射,因为您的 ID 与要调用的方法名称匹配。
当我有时间时,我会添加细节,但你可以开始你自己的研究,因为你似乎很有能力成为一个自称菜鸟的人。
至于通过 asp:HiddenField
将 ID 从客户端传递到服务器,这将不起作用,因为需要同步回发才能更新您刚刚在客户端上设置的值的服务器视图。 把隐藏字段想象成一个邮箱,你刚刚放了一封信,然后ajax电话就像你刚刚给信的收件人打了一个电话,但邮递员(回邮(甚至还没有来取信。 这个类比在那之后开始分崩离析,并不完美,但希望它能带来一些启示。 所以你要做的是将 ID 传递给 ajax 调用本身中的服务器。这将成为服务器端方法接收的参数值(chart
(。 如果要将多个数据片段传递给服务器,则可以将所有数据序列化为 JSON,并将单个对象传递到可以反序列化的服务器。 同样,当我有时间时,我将提供详细信息和示例,而不仅仅是要回复的电话。 您能否发布 ajax 调用本身的详细信息,以便我可以尝试为您的代码定制示例?