我在datalist空间中使用了checkbox这个html控件,然后我想在后台获取datalist中的checkbox空间。不要告诉我在前台控件中加run="server",因为我前台要用JS遍历了该控件,不能加那句。哪位知道的就来帮帮忙吧。

解决方案 »

  1.   

    我在datalist控件间中使用了checkbox这个html控件,然后我想在后台获取datalist中的checkbox空间。不要告诉我在前台控件中加runat="server",因为我前台要用JS遍历了该控件,不能加那句。哪位知道的就来帮帮忙吧!
    我使用过System.Web.UI.HtmlControls.HtmlInputCheckBox checkbox = (System.Web.UI.HtmlControls.HtmlInputCheckBox)item.FindControl("checkbox1") ,(我这里的item=datalist1.datalistitem[i];)但是获取不到ID=“checkbox1”的控件,应该是我的ID和服务器端产生的ID不同,所以获取不到。
      

  2.   

      如果想在后台获取前台html控件的值  就加runat="server" 可以直接获取
     要么就用js 给hidden赋值  再到后台去hidden的值
       你把html的控件id 改成和你的数据id一样就行了  或者改成你想要的值
      

  3.   

    查看下源代码,如果ID不同,该控件的客户端ID就是ID.ClientID
      

  4.   

    这个可以,我上次就是ASP.NET会给ID值,变成ID.ClientID试下
      

  5.   

    我现在换了中方法就是给方法弄的形参,然后前台给他形参,也就是我要的控件的某个属性。但是有点问题,希望各位能帮我看下。(后台的方法) [System.Web.Services.WebMethod]
    public int Photo_Delete(string val)
            {
                int a =0;
                string str = "DELETE Pictures WHERE Name=@Name";
         
               SqlParameter[] pram = { new SqlParameter("@Name", val) };
               a=database.RunProc(str, pram);
               return a;
                
            }
    公共类中的方法
     public int RunProc(string ProName,SqlParameter[] prams) //对数据库进行插入、删除、更新操作,带参数
           {
               this.Open();
               SqlCommand Command = new SqlCommand(ProName,con);
               if (prams != null)
               {
                   foreach (SqlParameter i in prams)
                   { Command.Parameters.Add(i); }
               }
               Command.ExecuteNonQuery();
               this.Closed();
               return 1;
           }
    前台调用 function photo_delete() {
            var a = 0;
            var x = document.getElementsByName("select_photo"); for (var i = 0; i < x.length; i++) { if (x[i].checked == true) break; if (i == x.length - 1) { alert("请先选择图片");return; } }
            var que = confirm("确定要删除图片?");
            if (que == 0)
                return;
            for (var i = 0; i < x.length; i++)
             {
                if (x[i].checked == true) { a = '<%=Photo_Delete("'+x[i].value+'")%>'; }
            }
            alert(a);
          } 
    我执行删除文件,程序没错误,可是数据库中的数据还是没删掉。公共类中的方法肯定没问题,我其他地方都还用过,就是不知道原因了。大家帮帮忙,解决了我加分。
      

  6.   

    你用模板了吧用模板的话id就变了 查看源码找到id的值 
    或者
    request.form["checkbox1"] 
      

  7.   

    我发现了我存在的问题:就是我是前台调用方法,这样服务器加载的时候总是首先执行我调用的方法,这样我前台就根本不可能向后台传值,所以是无法实现前台调用后台方法并传递形参的。
    我是想将前台选择图片的checkbox的value值传给后台,然后后台再依据value值进行删除操作。所以问下大家有没有什么办法可以不然服务器首先执行被调用的方法。
      

  8.   

    你用服务端控件或者html控件加"runat=server"后,使用js不起作用,是因为服务端控件的客户端id并非控件id本身。 所以你在js 中,只要拿到控件的客户端id,js还是同样起作用的。举例说明:
    假设有一input控件,
    <input type=button id='btnOk' runat='server' value="OK"/>
    那么你在html的<script>和</script>之间里,可以这么拿到这个控件的id:
    var btnOkId='<%=btnOk.ClientID%>';
    这样,btnOKId即为这个button控件的真正客户端id, 拿到客户端id后,你就可以用js控制它了。
    这个方法同样适用于asp.net服务端控件。总之,只要是服务端控件,想要在客户端的js里控制它,都要按照这种方法拿到服务端控件的正确客户端id.
      

  9.   

    request.form["checkbox1"]
    另外说声:这里的 "checkbox1" 是html控件中的name 的属性值,所以你要先给html控件配name属性。
    <input type='checkbox' id ='checkbox0001' name='checkbox1' />