【发布时间】:2019-12-17 05:05:27
【问题描述】:
我正在尝试在我的 Code Behind 中运行一些代码来查询我的 SQL Server(使用 JavaScript 变量),然后将结果作为整数传递回我的 Javascript。
我尝试过这样做,首先运行一些 Javascript 来获取 SQL SELECT 语句的变量,然后将其传递给隐藏的 ASP 字段(目前是用于测试目的的文本框)。
但是每次我运行代码 refreshHTML() 时,隐藏字段(文本框)的值都是空白的,它返回值 999999999。
当我运行应用程序时,我可以看到文本框填充了正确的值。
这是我在 C# 中的代码
public int ucount
{
get
{
if (String.IsNullOrEmpty(invoicenumberhidden.Text))
{
return 999999999;
}
else {
int invoicenumber = int.Parse(invoicenumberhidden.Text);
string commandText = "SELECT COUNT(*) AS distinct_count FROM (SELECT DISTINCT [inv_section],[invoice_number], [cust_po] FROM [Indigo].[dbo].[invoice_items] WHERE invoice_number=" + invoicenumber + ") AS I;";
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["Indigo2.Properties.Settings.Constr"].ConnectionString;
using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand(commandText, conn))
{
conn.Open();
cmd.ExecuteNonQuery();
int uniquecount = (Int32)cmd.ExecuteScalar();
conn.Close();
return uniquecount;
}
}
}
}
这是我在 ASP OnClientClick 事件上触发的 JavaScript 函数 refreshHtml()
//Get Primary Key from Grid1
var grid = jQuery("#<%= JQGrid1.ClientID %>");
var rowKey = grid.getGridParam("selrow");
document.getElementById('<%= invoicenumberhidden.ClientID %>').value = rowKey;
var jsucount = '<%=this.ucount%>';
alert(jsucount);
这是我的相关 ASP 代码
<div hidden> <asp:Button ID="btnDownload" runat="server" OnClientClick="refreshHtml();" OnClick="btnDownloadButton_Click" Text="Export PDF"></asp:Button></div>
<asp:TextBox ID="invoicenumberhidden" runat="server"></asp:TextBox>
【问题讨论】:
-
您是否查看过浏览器开发者工具的“网络”选项卡?什么数据来回传输? SQL 语句本身是否按预期返回?
-
SQL 语句永远不会运行,问题是隐藏字段(文本框(值是 NULL。虽然当我运行应用程序时,文本框显示为已填充。
-
顺便说一句,在 SQL 命令/查询中使用非参数化变量是一种不好的做法,而且很危险——你会让自己很容易受到 SQL 注入攻击
-
另外,为什么不使用可为空的 int 而不是返回 999999999?
标签: javascript c# asp.net hidden-field