使用Javascript访问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控件中的asp:textbox控件的文本值时遇到了很大的困难。代码如下:

<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,您可以执行以下操作:

//获取id为tpUserIP(多行)的所有输入字段

$ipaddressFields=$(“输入[id*=tpUserIP]”)

//提醒每一个,如果有的话,以显示它的工作

如果($ipaddressFields.length>0){

}


下面是如何在不使用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();

    }
}