javascript - 将变量从 Javascript 传递到 C# 以在 SQL SELECT 中使用,然后将结果传递回 Javascript
问题描述
我试图在我的代码后面运行一些代码来查询我的 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 事件函数 refreshHtml() 上触发的 JavaScript
//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>
解决方案
替换var jsucount = '<%=this.ucount%>';
为var jsucount = document.getElementById('<%= invoicenumberhidden.ClientID %>').value;
。
您正面临这个问题,因为在您的 html 页面中,您将拥有var jsucount = 999999999
. 在这里获得999999999
价值,因为 .net 将'<%=this.ucount%>'
在将页面发送到您的浏览器时设置价值。它不会反映在服务器上进行的任何进一步更改。
编辑2:
因为你想做服务器之旅以获得最新ucount
价值。你可以试试看PageMethods
。
您可以将ucount
逻辑移动到method
喜欢GetUCount
并给出[WebMethod]
注释。但是您不能在这里使用控件,因此您需要在参数中传递隐藏字段的值。并且还需要在 javascript 中进行一些更改,如下所述。
后面的代码:
[WebMethod]
public int GetUCount(string invoicenumberhidden)
{
if (String.IsNullOrEmpty(invoicenumberhidden))
{
return 999999999;
}
else
{
int invoicenumber = int.Parse(invoicenumberhidden);
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;
}
}
}
Javascript:
function refreshHtml() {
//Get Primary Key from Grid1
var grid = jQuery("#<%= JQGrid1.ClientID %>");
var rowKey = grid.getGridParam("selrow");
document.getElementById('<%= invoicenumberhidden.ClientID %>').value = rowKey;
PageMethods.GetUCount(rowKey, onSuccess, onFailure);
}
function onSuccess(result) {
alert(result);
}
function onFailure(result) {
alert("Failed!");
}
推荐阅读
- c# - 保留文本框的先前值,直到表单关闭
- python - 有一个意外的关键字参数
- javascript - 存储的图像保存为“八位字节流”而不是 image/jpeg(firebase 和 ReactNative)
- javascript - MapBox 反向地理编码
- git - eslint 和 vue 的预提交钩子
- javascript - 有没有办法将对象属性作为单个参数动态传递?
- java - 处理损坏的 install4j 安装程序
- r - 反应函数问题,尝试更改正在导入的数据集列的类型(R Shiny)
- java - Spring Mongo 是否默认公开集合的端点?
- css - Bootstrap 响应式导航栏切换按钮不起作用