C# 在c中从代码隐藏调用javascript函数时,document.getElementById()不起作用#

C# 在c中从代码隐藏调用javascript函数时,document.getElementById()不起作用#,c#,javascript,code-behind,C#,Javascript,Code Behind,我有一个javascript函数,当单击链接按钮时,它在default.aspx中运行良好。 然而,当我从代码隐藏调用此函数时,它无法工作 以下是我在default.aspx中的部分代码: function loadAdditionalInfoDialog(qtyId) { alert(qtyId); var qty = document.getElementById(qtyId).value; alert(qty); } 单击按钮时,以下是我在代码隐藏(default

我有一个javascript函数,当单击链接按钮时,它在default.aspx中运行良好。 然而,当我从代码隐藏调用此函数时,它无法工作

以下是我在default.aspx中的部分代码:

function loadAdditionalInfoDialog(qtyId)
{
    alert(qtyId);
    var qty = document.getElementById(qtyId).value;
    alert(qty);
}
单击按钮时,以下是我在代码隐藏(default.aspx.cs)中的部分代码:

protected void btnRedeemAll_Click(object sender, EventArgs e){
    TextBox txtQty = (TextBox)itm.FindControl("txtQty");

    ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "temp", "<script>loadAdditionalInfoDialog(" + txtQty.ClientID + ")</script>", false);
}
protectedvoid btnredemall\u单击(对象发送者,事件参数e){
TextBox txtQty=(TextBox)itm.FindControl(“txtQty”);
ScriptManager.RegisterStartupScript(this.Page,this.GetType(),“temp”,“loadAdditionalInfoDialog(“+txtQty.ClientID+”),false);
}
警报(qtyId)适用于两侧,并打印出相同的单词。(默认页面和代码隐藏)。 但代码隐藏无法发出警报(数量)。有人知道我有什么问题吗


请注意,qtyId是default.aspx中中继器内的文本框id

您可能传递了错误的
ClientID

使用java脚本调试器(如FireBug)并检查
var qty=document.getElementById(qtyId)
不是
null
(可能是)

再看看

你能试试下面吗

protected void btnRedeemAll_Click(object sender, EventArgs e){
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "temp", "  <script>loadAdditionalInfoDialog('" + txtQty.ClientID + "')</script>", false);
}
protectedvoid btnredemall\u单击(对象发送者,事件参数e){
ScriptManager.RegisterStartupScript(this.Page、this.GetType()、“temp”、“loadAdditionalInfoDialog(“+txtQty.ClientID+”)、false);
}

似乎在传递的clientid周围缺少单引号。

是否缺少参数
'“+txtQty.clientid+”中的引号。

protectedvoid btnredemall\u单击(对象发送者,事件参数e){
ScriptManager.RegisterStartupScript(this.Page、this.GetType()、“temp”、“loadAdditionalInfoDialog(“+txtQty.ClientID+”)、false);
}试试看:

Page.ClientScript.RegisterStartupScript(this.GetType(), "temp", "<script>loadAdditionalInfoDialog('" + txtQty.ClientID + "')</script>", false);
Page.ClientScript.RegisterStartupScript(this.GetType(),“temp”,“loadAdditionalInfoDialog(“+txtQty.ClientID+”),false);

这是在初始页面呈现期间应该绑定的脚本的方法。

我猜问题是由您在按钮单击事件处理程序上创建控件txtQty引起的

这是一个动态创建的控件,可能不存在于ASP.NET引擎生成的HTML中

尝试使用页面上的控件以及在“设计”视图中添加的控件,并检查是否出现相同问题

更新:
道歉。在按钮单击事件处理程序中,尝试查找控件。你为什么这么做?该控件是在应用程序的另一部分的某处动态创建的控件吗?

我使用FireBug检查var qty=document.getElementById(qtyId)是否为null。在代码隐藏中调用loadAdditionalInfoDialog()时,我发现它是空的。但在default.aspx中调用此函数时,它不为null。但我不明白为什么它仍然可以发出警报(qtyId),然后进入下一行,var qty=document.getElementById(qtyId)变为null。抱歉,如果我问了一个愚蠢的问题,我刚刚开始C#和编程。查看源代码,检查元素的实际ID是否与第一个警报中得到的ID相同。在loadAdditionalInfoDialog(qtyId)中,警报(qtyId)在两侧都工作正常,这意味着当我调用loadAdditionalInfoDialog()时,它会提醒相同的单词来自代码隐藏,以及default.aspx中的普通javascript函数调用。两者都提醒相同的单词,即:bodyContent\u ucSearchGifts\u repGiftResults\u txtQty\u 0,但只有代码隐藏才能执行下一行代码。假设它可以正常工作?对不起,如果我问了一个愚蠢的问题。我刚刚接触c#和编程。如果您在第一个警报中获得了正确的id,那么它与后面的代码无关,javascript中有问题。如果你能发布实际的代码,我们可以更好地帮助你,实际上这是实际的代码。我不确定javascript有什么问题。但是,当我像普通一样调用javascript函数(不是从代码后面调用)时,它就是工作。在我看来,如果它是工作的,假设它在从代码后面调用这个函数时也可以工作,对吗?是的,它应该工作。你发布的代码没有错。检查是否忽略了某些内容FindControl是否返回正确的控件,检查它?I Response.Write(txtQty)和Response.Write(txtQty.ClientID)。我发现Response.Write(txtQty.ClientID)实际上与javascript函数中的单词“我发出警报”(qtyId)相同。如果我做了傻事,我会感到抱歉。我只是c#和编程的新手。你的意思是像这样检查吗?方法'RegisterStartupScript'没有重载需要5个参数我得到了这个错误>@Panadolchung但是这个需要4个参数而不是5个,怎么了?抱歉,刚才有点错误。我现在用回你的代码,但问题还是一样。TypeError:document.getElementById(…)为空变量qty=document.getElementById(qtyId).value@PanadolChong:那个元素在页面上是静态的还是动态添加的?我对编程很陌生,不知道如何考虑它是动态的还是静态的。基本上是这样的:有一个分区,分区内有一个转发器,转发器会在网站上显示一个表格。该表从数据库表中获取数据。如果我的数据库表有9行数据,那么转发器将显示9行数据,如果我的数据库表有10行,那么转发器将显示10行数据。注意:有一个分区,分区内有一个转发器,转发器将在网站中显示一个表。该表从数据库表中获取数据。如果我的数据库表有9行数据,则中继器将显示9行数据,如果我的数据库表有10行,则中继器将显示10行数据。因此,这些id在中继器中,我只能使用FindControl()获得对元素的控制。
Page.ClientScript.RegisterStartupScript(this.GetType(), "temp", "<script>loadAdditionalInfoDialog('" + txtQty.ClientID + "')</script>", false);