C# 在ASP.NET中将值传递给javascript

C# 在ASP.NET中将值传递给javascript,c#,javascript,asp.net,C#,Javascript,Asp.net,我有一个ASP文本框控件,当OnClick事件发生时,我需要在其中执行一些javascript函数。我需要向javascript函数传递该页面上其他控件的两个ID。我的文本框标记如下所示: <asp:TextBox ID="txtMonthDisplay" runat="server" Style="border-top: none; border-left: none; border-right: none; border-bottom: solid 1px blue; cursor:

我有一个ASP文本框控件,当OnClick事件发生时,我需要在其中执行一些javascript函数。我需要向javascript函数传递该页面上其他控件的两个ID。我的文本框标记如下所示:

<asp:TextBox ID="txtMonthDisplay" runat="server" Style="border-top: none; border-left: none;
border-right: none; border-bottom: solid 1px blue; cursor: pointer; color: Blue;
width: 35px;" EnableViewState="True" MaxLength="3" onClick="javascript: ShowBox('<%= divYear.ClientID%>', '<%= txtYearDisplay.ClientID %>');"></asp:TextBox>

但是,每当它调用javascript函数时,我都会设置一个警报来检查传入的值,并且它们非常简单。而不是那些控件的实际ID

我在这里遗漏了什么,或者做得不对?我不太熟悉asp.net,所以服务器端和客户端对我来说有点模糊


谢谢

嗯,您的标记看起来是正确的,我会尝试几件事,首先尝试通过代码添加onclick事件,看看是否添加了id。这样,您就可以知道文本框生成是否正常工作


您也可以在文档之后进行单击绑定来解决这个问题。准备好使用JQuery并将值作为隐藏值保存在表单上。

嗯,您的标记看起来是正确的,我会尝试几件事,首先尝试通过代码添加onclick事件,看看是否添加了ID。这样,您就可以知道文本框生成是否正常工作


您还可以通过在文档后执行单击绑定来解决此问题。准备好使用JQuery并将值作为隐藏值保存在表单上。

然后从codebehind传递变量:

protected void Page_Load(object sender, EventArgs e){
    txtMonthDisplay.Attributes.Add("onClick", 
            String.Format("ShowBox('{0}','{1}')", 
            divYear.ClientID, 
            txtYearDisplay.ClientID));
}
txtMonthDisplay.Attributes["onclick"] = string.Format(
    "ShowBox('{0}', '{1}');",
    divYear.ClientID,
    txtYearDisplay.ClientID);
显示表达式相当于只包含
响应.Write(…)
语句的嵌入式代码块。这是显示单个字符串、整型变量或常量等信息的最简单方法

请记住在服务器控件的属性中不能使用显示表达式。这是因为.NET Framework直接编译整个表达式,而不是将内容显示为属性的值


然后从codebehind传递变量:

protected void Page_Load(object sender, EventArgs e){
    txtMonthDisplay.Attributes.Add("onClick", 
            String.Format("ShowBox('{0}','{1}')", 
            divYear.ClientID, 
            txtYearDisplay.ClientID));
}
txtMonthDisplay.Attributes["onclick"] = string.Format(
    "ShowBox('{0}', '{1}');",
    divYear.ClientID,
    txtYearDisplay.ClientID);
显示表达式相当于只包含
响应.Write(…)
语句的嵌入式代码块。这是显示单个字符串、整型变量或常量等信息的最简单方法

请记住在服务器控件的属性中不能使用显示表达式。这是因为.NET Framework直接编译整个表达式,而不是将内容显示为属性的值


您不能
响应。将
响应的缩写。将
写入服务器标记(通常)

相反,您可以在codebehind中编写onclick处理程序:

protected void Page_Load(object sender, EventArgs e){
    txtMonthDisplay.Attributes.Add("onClick", 
            String.Format("ShowBox('{0}','{1}')", 
            divYear.ClientID, 
            txtYearDisplay.ClientID));
}
txtMonthDisplay.Attributes["onclick"] = string.Format(
    "ShowBox('{0}', '{1}');",
    divYear.ClientID,
    txtYearDisplay.ClientID);

顺便说一下,您不需要
javascript:
前缀。这仅在设置链接的
href
以执行脚本时才有必要。事件处理程序(如
onclick

)不需要它。您不能
响应。将
写入(
响应的缩写。将
写入服务器标记(通常)

相反,您可以在codebehind中编写onclick处理程序:

protected void Page_Load(object sender, EventArgs e){
    txtMonthDisplay.Attributes.Add("onClick", 
            String.Format("ShowBox('{0}','{1}')", 
            divYear.ClientID, 
            txtYearDisplay.ClientID));
}
txtMonthDisplay.Attributes["onclick"] = string.Format(
    "ShowBox('{0}', '{1}');",
    divYear.ClientID,
    txtYearDisplay.ClientID);

顺便说一下,您不需要
javascript:
前缀。这仅在设置链接的
href
以执行脚本时才有必要。事件处理程序(如
onclick

)不需要它,但我遇到了一些问题。所以我想我应该试试别的。它打开了一个全新的蠕虫罐头。这个文本框是静态的,但我使用jQuery在加载时在页面上创建了多个(可能)文本框。每当我使用C#代码在页面上添加属性(ShowBox…)时,它会完全清除我使用jQuery设置到其他动态文本框的所有属性。这只是IEThrough代码中的一个问题,但我遇到了一些问题。所以我想我应该试试别的。它打开了一个全新的蠕虫罐头。这个文本框是静态的,但我使用jQuery在加载时在页面上创建了多个(可能)文本框。每当我使用C#代码在页面上添加属性(ShowBox…)时,它会完全清除我使用jQuery设置到其他动态文本框的所有属性。IEok中唯一有意义的问题是它是Response.Write的缩写。如果我在页面加载期间从codebehind传递它,它似乎会清除使用jQuery设置的动态创建的文本框的属性。因此,我的所有文本框最终都会将原始文本框的值传递给函数。这只发生在IE中。对此有什么想法吗?请确保仅在页面未被发回时设置内容。@加密-似乎使用数据绑定语法(
)在某些情况下有效,但我记不起这些情况是什么。关于jQuery问题,这听起来像是一个新问题。ASP.Net编写的HTML是否像预期的那样包含实际的clientID?好的,这是Response.Write的简写。如果我在页面加载期间从codebehind传递它,它似乎会清除使用jQuery设置的动态创建的文本框的属性。因此,我的所有文本框最终都会将原始文本框的值传递给函数。这只发生在IE中。对此有什么想法吗?请确保仅在页面未被发回时设置内容。@加密-似乎使用数据绑定语法(
)在某些情况下有效,但我记不起这些情况是什么。关于jQuery问题,这听起来像是一个新问题。ASP.Net编写的HTML是否像预期的那样包含实际的clientID?