代码如下:<asp:Repeater ID="rptDatas" runat="server" OnItemDataBound="rptISaws_ItemDataBound">
<ItemTemplate>
<asp:HiddenField ID="hidUserID1" runat="server" Value='<%#Eval("LogoID") %>' />
<asp:HiddenField ID="hidMainUserID1" runat="server" Value='<%#Eval("OtherUserID") %>'/>                    </ItemTemplate>
</asp:Repeater><asp:HyperLink ID="linkSendMsg" runat="server" NavigateUrl="javascript:void(0),show()">获取ID</asp:HyperLink>js我是这样写的:
function show() {
            alert("我的LogoID是:" + $("#hidUserID1").val() + ",OtherUserID是:" + $("#hidMainUserID1").val());
        }
运行时却获取不到值:我的LogoID是:undefined,OtherUserID是:undefined 。
已经确定绑定的字段有值了,但就是用js获取不到里面的值,只能是上面的结果,如果这样写:
 alert("我的LogoID是:" + $('<%=hidUserID1.ClientID %>').val() + ",OtherUserID是:" + $('<%=hidMainUserID1.ClientID %>').val());编译时就会报错当前上下文找不到hidUserID1和hidMainUserID1,因为它在repeater里面,到底怎么样才能用js获取repeater中HiddenField的值呢?求求高手帮帮我,小弟是初学者,代码写得不好还望指点,急求解决方案,到底用js怎么写!

解决方案 »

  1.   

    function show() {
      alert("我的LogoID是:" + $("#rptDatas$hidUserID1").val() + ",OtherUserID是:" + $("#rptDatas$hidMainUserID1").val());
      }
      

  2.   

    好像客户端是以_为分隔符  LZ 你试试这个   
    function show() {
      alert("我的LogoID是:" + $("#rptDatas_hidUserID1").val() + ",OtherUserID是:" + $("#rptDatas_hidMainUserID1").val());
      }
    如果还是没用 就用
    js
     var HdnValues = document.getElementById("<%=hidUserID1.ClientID%>");
    <%=hidUserID1.ClientID%>表示获取客户端ID
      

  3.   

    你要明白,hidUserID1在客户端会有很多个,你要返回的是哪行的那个?
      

  4.   


    不行啊大哥,第一种编译的时候就会报错说当前上下文中找不到hidUserID1和hidMainUserID1
    两种都不行,怎么搞好呢
      

  5.   

    本帖最后由 net_lover 于 2011-09-13 21:12:02 编辑
      

  6.   


    function show() {
      alert("我的LogoID是:" + $("#rptDatas_hidUserID1").val() + ",OtherUserID是:" + $("#rptDatas_hidMainUserID1").val());
      }
    这是重新组合的ID  不是你原来的hidUserID1和hidMainUserID1第二种你参照我的和net_lover7楼的再测试下
      

  7.   

    不是很明白,能说明白一点吗,jquery我不是很熟,解释一下好吗
      

  8.   

    就是说,你的Repeater会生成很多很多个
    <input type=hidden id="hidUserID1_xxxx">
    到客户端,每个id都是不同的,在客户端是没有ID="hidUserID1"的所以,你要知道你要得到的哪行的
    <asp:HiddenField ID="hidUserID1" runat="server" Value='<%#Eval("LogoID") %>' />
    $("#<%=rptDatas.ClientID%> input").each(function(index) {
    alert($(this).attr("id") + ': ' + $(this).val());
    });
    是得到全部的
    <asp:HiddenField ID="hidUserID1" runat="server" Value='<%#Eval("LogoID") %>' />
    和<asp:HiddenField ID="hidMainUserID1" runat="server" Value='<%#Eval("OtherUserID") %>'/> </ItemTemplate>
      

  9.   

    我明白你的意思了,不过我自己还是不懂得怎么写这段代码,那我要获取某一项的<asp:HiddenField ID="hidUserID1" runat="server" Value='<%#Eval("LogoID") %>' />
    和<asp:HiddenField ID="hidMainUserID1" runat="server" Value='<%#Eval("OtherUserID") %>'/> </ItemTemplate>的值,我得怎么写呢,你能写个完整代码给我吗,我刚接触asp.net,很多都不熟,求求你,帮帮我好吗
      

  10.   


     function getbooklist()
      {
      var valueList="";
      var cbs=document.getElementsByTagName("input");
      document.MyForm.all.checked=false;
      for(var i=0;i<cbs.length;i++)
      {
      if(cbs[i].type=='hidden')
      {
      valueList=valueList+cbs[i].value+",";
      }
      }
      valueList=valueList.substr(0,valueList.length-1)
      return valueList;
      }
      

  11.   

    将下面的代码直接存成test.aspx
    直接运行看效果<%@ Page Language="C#" EnableViewState="false" %><%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">  protected void Page_Load(object sender, EventArgs e)
      {
        System.Data.DataTable dt = new System.Data.DataTable();
        System.Data.DataRow dr;
        dt.Columns.Add(new System.Data.DataColumn("LogoID", typeof(System.Int32)));
        dt.Columns.Add(new System.Data.DataColumn("OtherUserID", typeof(System.Int32)));    for (int i = 0; i < 8; i++)
        {
          System.Random rd = new System.Random(Environment.TickCount * i); ;
          dr = dt.NewRow();
          dr[0] = i;
          dr[1] = i * i + 10;
          dt.Rows.Add(dr);
        }
        rptDatas.DataSource = dt;
        rptDatas.DataBind();  }
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
      <script src="jquery-1.6.2.min.js" type="text/javascript"></script>
      <script type="text/javascript">
        function show() {
          $("#x input").each(function (index) {
            alert($(this).attr("id") + ': ' + $(this).val());
          });
        }  </script>
    </head>
    <body>
      <form id="form1" runat="server">
      <div id="x">
        <asp:Repeater ID="rptDatas" runat="server">
          <ItemTemplate>
            <asp:HiddenField ID="hidUserID1" runat="server" Value='<%#Eval("LogoID") %>' />
            <asp:HiddenField ID="hidMainUserID1" runat="server" Value='<%#Eval("OtherUserID") %>' />
          </ItemTemplate>
        </asp:Repeater>
      </div>
      <input type="button" value="获取ID" onclick="show()" />
      <asp:HyperLink ID="linkSendMsg" runat="server" NavigateUrl="javascript:void(0),show()">获取ID</asp:HyperLink>
      </form>
    </body>
    </html>
      

  12.   

    本帖最后由 net_lover 于 2011-09-13 21:45:58 编辑
      

  13.   

    看到效果了,不过那只是一点击按钮或链接就弹出所有的项的hidUserID1和hidMainUserID1,但我想要的是单击这一项,就获取这一项的hidUserID1和hidMainUserID1,并且把这两个值用两个变量存起来留作以后操作,那又该怎么做呢,再麻烦你写写好吗,真的很感谢你!
      

  14.   

    本帖最后由 net_lover 于 2011-09-13 22:23:28 编辑
      

  15.   

    我的意思就是说,repeater里面的每一项里面都有一个按钮或链接,单击这个按钮或链接就获得当前这一项的hidUserID1和hidMainUserID1,然后把这两个值用两个变量存起来留作以后操作,这样该怎样写呢,麻烦你好吗?
      

  16.   

    是啊,完整的源代码
    这个是使用jquery的方法。<%@ Page Language="C#" EnableViewState="false" Debug="true" %><%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">  protected void Page_Load(object sender, EventArgs e)
      {
        System.Data.DataTable dt = new System.Data.DataTable();
        System.Data.DataRow dr;
        dt.Columns.Add(new System.Data.DataColumn("LogoID", typeof(System.Int32)));
        dt.Columns.Add(new System.Data.DataColumn("OtherUserID", typeof(System.Int32)));
        dt.Columns.Add(new System.Data.DataColumn("Name", typeof(System.String)));    for (int i = 0; i < 8; i++)
        {
          System.Random rd = new System.Random(Environment.TickCount * i); ;
          dr = dt.NewRow();
          dr[0] = i;
          dr[1] = i * i + 10;
          dr[2] = "孟子E章" + i.ToString();
          dt.Rows.Add(dr);
        }
        rptDatas.DataSource = dt;
        rptDatas.DataBind();  }  protected void rptDatas_ItemDataBound(object sender, RepeaterItemEventArgs e)
      {
        if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
        {
          HiddenField hidUserID1 = e.Item.FindControl("hidUserID1") as HiddenField;
          HiddenField hidMainUserID1 = e.Item.FindControl("hidMainUserID1") as HiddenField;
          HyperLink linkSendMsg = e.Item.FindControl("linkSendMsg") as HyperLink;
          linkSendMsg.NavigateUrl = "javascript:void(0),show('" + hidUserID1.ClientID + "','" + hidMainUserID1.ClientID + "')";
        }
      }
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
      <script src="jquery-1.6.2.min.js" type="text/javascript"></script>
      <script type="text/javascript">
        function show(xx, yy) {
          alert($("#" + xx).val() + " : " + $("#" + yy).val());
        }
      </script>
    </head>
    <body>
      <form id="form1" runat="server">
      <div id="x">
        <asp:Repeater ID="rptDatas" runat="server" OnItemDataBound="rptDatas_ItemDataBound">
          <HeaderTemplate>
            <table>
          </HeaderTemplate>
          <FooterTemplate>
            </table></FooterTemplate>
          <ItemTemplate>
            <tr>
              <td>
                <%#Eval("Name") %>
                <asp:HiddenField ID="hidUserID1" runat="server" Value='<%#Eval("LogoID") %>' />
                <asp:HiddenField ID="hidMainUserID1" runat="server" Value='<%#Eval("OtherUserID") %>' />
                <asp:HyperLink ID="linkSendMsg" runat="server">获取本行ID</asp:HyperLink>
              </td>
            </tr>
          </ItemTemplate>
        </asp:Repeater>
      </div>
      </form>
    </body>
    </html>
      

  17.   

    直接得到内容的方法
    <asp:Repeater ID="rptDatas" runat="server">
      <HeaderTemplate>
      <table>
      </HeaderTemplate>
      <FooterTemplate>
      </table></FooterTemplate>
      <ItemTemplate>
      <tr>
      <td>
      <%#Eval("Name") %>
      <asp:HiddenField ID="hidUserID1" runat="server" Value='<%#Eval("LogoID") %>' />
      <asp:HiddenField ID="hidMainUserID1" runat="server" Value='<%#Eval("OtherUserID") %>' />
      <asp:HyperLink ID="linkSendMsg" runat="server" NavigateUrl=<%# "javascript:void(0),show('" + Eval("LogoID") + "','" + Eval("OtherUserID") + "')" %>>获取本行ID</asp:HyperLink>
      </td>
      </tr>
      </ItemTemplate>
      </asp:Repeater>
      

  18.   

    真的太谢谢你了,总算可以获取到了,但现在有出现了一个问题,就是像这样:
    foreach (Control item in rptDatas.Controls)
            {            HtmlGenericControl link = item.FindControl("showCon") as HtmlGenericControl;
                if (link != null)
                {
                    link.InnerHtml = "<a href='<%# "javascript:void(0),show(" + Eval("LogoID") + "," + Eval("OtherUserID") + ")" %>' id="val" class="btn_ favorites">解除黑名</a>";
                }
            }
    link.InnerHtml = "<a href='<%# "javascript:void(0),show(" + Eval("LogoID") + "," + Eval("OtherUserID") + ")" %>' id="val" class="btn_ favorites">解除黑名</a>";
    这一句话有错啊,这么多引号,我都不知道怎么写这个链接,怎么写呢,你能帮我解决这个小问题吗,今天真的太麻烦你了,能加你QQ吗,我想跟你学习学习行吗?
      

  19.   

    晕了,这么容易的题目,你不会查看HTML源代码分析嘛,,,根据我1L的提示,你完全可以延伸出许多专家的思路,当然我刚刚发得有点匆忙,,如果孟老大的DEMO还不能让你解惑,就回复我
      

  20.   

    "<a href='javascript:show('<%# Eval(\"LogoID\")%>','<%# Eval(\"OtherUserID\")%>') id=\"val\" class=\"btn_ favorites\">解除黑名</a>";试试看
      

  21.   

    怎么要放到.CS里去呢?直接放aspx嘛
    <a href="javascript:show('<%# Eval("ID") %>','<%# Eval("Name") %>')">解除绑定</a>
      

  22.   

    放在一个方法里面的:
         /// <summary>
        /// 修改某个超链接内容(我关注的人列表中)
        /// </summary>
        void IsConcert()
        {
            foreach (Control item in rptDatas.Controls)
            {
                HtmlGenericControl link = item.FindControl("showCon") as HtmlGenericControl;
                if (link != null)
                {
                    link.InnerHtml = "<a href='javascript:show('<%# Eval(\"LogoID\")%>','<%# Eval(\"OtherUserID\")%>') id=\"val\" class=\"btn_ favorites\">取消关注</a>";
                }
             }
        }
    这样写什么效果都没有了,超链接变成源码了,不知道该怎么写好,汗
      

  23.   

    本帖最后由 net_lover 于 2011-09-14 08:21:55 编辑
      

  24.   

    哪里还用得这么麻烦,直接把值当做参数传过去不就OK了吗。<asp:Repeater ID="Repeater1" runat="server">
                <ItemTemplate>
                    <table width="100%">
                        <tr>
                            <td width="95%" align="left">
                                <img alt="" src="../../Images/turnright.png" />
                                <a href="#" onclick="ShowNotice(<%#Eval("PID") %>)">
                                    <%#Eval("Title") %>
                                    &nbsp;&nbsp;&nbsp;&nbsp;<%#Eval("PublishDate")%></a>
                            </td>
                        </tr>
                    </table>
                </ItemTemplate>
            </asp:Repeater>
        <script type="text/javascript">
            function ShowNotice(value) {
                alert(value);
                
            }
        </script>