使用Javascript访问asp:Datalist控件内的asp:Textbox值
我在访问asp:Datalist控件中的asp:textbox控件的文本值时遇到了很大的困难。代码如下:使用Javascript访问asp:Datalist控件内的asp:Textbox值,javascript,asp.net,Javascript,Asp.net,我在访问asp:Datalist控件中的asp:textbox控件的文本值时遇到了很大的困难。代码如下: <asp:DataList id="UserIP" DataSourceID="dsGetData" runat="server" CssClass="lblText"> <ItemTemplate> <span class="lblText">IP Address:</span><br />
<asp:DataList id="UserIP" DataSourceID="dsGetData" runat="server" CssClass="lblText">
<ItemTemplate>
<span class="lblText">IP Address:</span><br />
<asp:TextBox ID="tbUserIP" class="textbox_medium" runat="server" AutoPostBack="false" Text='<%# Eval("[IPAddress]") %>' /></asp:TextBox>
</ItemTemplate></asp:DataList>
IP地址:
我正在根据SQL查询的结果为文本框赋值。然后我需要使用Javascript获取Texbox的值。我的JavaScript代码如下:
var temp = document.getElementById("<%= UserIP.FindControl("tbUserIP").ClientID %>");
var temp=document.getElementById(“”);
我不断收到编译错误:
当前上下文中不存在名称“tbUserIP”
非常感谢您的帮助。您的代码的问题是,当您调用
UserIP.FindControl(“tbUserIP”).ClientID
时,tbUserIP
不可用
请注意,要访问这样的控件,您必须首先调用DataBind over UserIP DataList,并且只有在这之后,您可能会得到一些结果,这些结果将生成包含名为tbUserIP
的文本框的行
为了解决这个问题,因为有很多方法可以解决它,我建议你看看这个:
,这样你就可以清楚地知道,在实现你想要的目标的过程中,你可能遗漏了哪一步
或者,不需要太依赖ASP.NET页面处理,您可以使用javascript来处理最终结果
即:
- 如果您的数据列表有结果,那么在生成的HTML中会有类似的内容,对吗
- 因此,为了在javascript上获取这些信息,假设您可以使用jQuery,您可以执行以下操作:
下面是如何在不使用JQuery的情况下在JavaScript中实现这一点。我不确定从哪里调用JavaScript函数。我给你们举两个例子。也就是说,一个是文本框的一次点击,另一个是按钮的一次点击 这是HTML标记
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>
<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">
function Test(obj) {
alert(obj.id); // This is the ID of the textbox clicked on
alert(obj.value); // This is the value of the textbox clicked on
}
function Test2() {
var dataListid = '<%= UserIP.ClientID %>';
var obj = document.getElementById(dataListid);
if (obj != 'undefined' || obj != null) {
for (var i = 0; i < obj.getElementsByTagName('input').length; i++) { // Loop through all TextBoxes (input elements if we talk in markup language)
alert(obj.getElementsByTagName('input')[i].value); // Here are the values of each textbox
}
}
}
</script>
<form id="form1" runat="server">
<div>
<asp:DataList id="UserIP" runat="server" CssClass="lblText" >
<ItemTemplate>
<span class="lblText">IP Address:</span><br />
<asp:TextBox ID="tbUserIP" class="textbox_medium" runat="server" AutoPostBack="false" Text='<%# String.Concat("Test", (Convert.ToInt32(Container.ItemIndex)+1))%>' onclick="Test(this);" /></asp:TextBox>
</ItemTemplate>
</asp:DataList>
<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="Test2();" />
</div>
</form>
</body>
</html>
功能测试(obj){
警报(obj.id);//这是单击的文本框的id
警报(obj.value);//这是单击的文本框的值
}
函数Test2(){
var dataListid='';
var obj=document.getElementById(dataListid);
if(obj!=“未定义”| | obj!=null){
for(var i=0;i
这是我使用的代码。您可以使用自己的代码绑定数据列表
using System;
using System.Collections.Generic;
public partial class Test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<string> ips = new List<string>() {"1", "2", "3"};
UserIP.DataSource = ips;
UserIP.DataBind();
}
}
使用系统;
使用System.Collections.Generic;
公共部分类测试:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
List ips=新列表(){“1”、“2”、“3”};
UserIP.DataSource=ips;
UserIP.DataBind();
}
}
希望这有帮助
干杯 不是很好的回应Sam。。。我理解,你知道怎么做,但最好是解释一下这个家伙,为什么不工作,为什么不工作,而不是在响应中抛出一堆代码。也许你可以重新设计你的答案,包括进一步解释为什么它不能像他那样工作;)。你解释得很好,我为什么要再解释一遍?所以我给了他/她另一种方法。不过我明白你的意思。下一次我会这么做:)谢谢山姆。你让我走上了正确的方向。我尝试实现datalist控件,但发现在本例中使用gridview控件更容易。下次我使用数据列表时,你的信息会派上用场。我仍在努力学习这些东西,我感谢你的帮助,并为我指出一些有用的信息。
using System;
using System.Collections.Generic;
public partial class Test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<string> ips = new List<string>() {"1", "2", "3"};
UserIP.DataSource = ips;
UserIP.DataBind();
}
}