前台 Repeater 中绑定了 N 个 input ,提交的时候,如何遍历取值呢?

时间:2021-08-27 10:50:54
前台 Repeater 中绑定了 N 个 input ,提交的时候,如何遍历取值呢?

HTML CODE
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
<ItemTemplate>
<tr>
    <td><input type="text" id="a" />&nbsp;</td>
    <td><input type="text" id="adf" />&nbsp;</td>
    <td><input type="text" id="bba" />&nbsp;</td>
    ...
    <td><input type="text" id="N" />&nbsp;</td>
</tr>
</ItemTemplate>
</asp:Repeater>

C# CODE
protected void Button1_Click(object sender, EventArgs e)
    {
        //  问题:这里如何遍历取值
    }

15 个解决方案

#1


关注

#2


自已顶一下。

#3


你的Button1在Repeater的模板中还是在外面?
关键是要取得相应行的RepeaterItem,才能找到里面的Input。

#4


引用 3 楼 liuyeede 的回复:
你的Button1在Repeater的模板中还是在外面? 
关键是要取得相应行的RepeaterItem,才能找到里面的Input。


在 Repeater 的外面。

#5


你可以把Item部分写成一个用户控件,然后每个input都是用户控件中的某个属性(当然是一个集合类型的)的值。

在遍历时,只需要得到这个用户控件,然后找到这个用户控件所对应的属性区遍历就可以了。当然,这个集合也可以是你自己定义的。

#6


引用 3 楼 liuyeede 的回复:
你的Button1在Repeater的模板中还是在外面?
关键是要取得相应行的RepeaterItem,才能找到里面的Input。


同问

#7


你将按钮放到Repeaterd的模板中会好做许多。

#8


<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
<ItemTemplate>
<tr>
    <td> <input type="text" id="a"  runat=server />&nbsp; </td>
    <td> <input type="text" id="adf" runat=server/>&nbsp; </td>
    <td> <input type="text" id="bba" runat=server/>&nbsp; </td>
    ...
    <td> <input type="text" id="N" runat=server/>&nbsp; </td>
</tr>
</ItemTemplate>
</asp:Repeater> 


// 
protected void Button1_Click(object sender, EventArgs e)
    {

// 遍历所有 Item
foreach(RepeaterItem item in Repeater1.Items) {
     foreach(Control ctrl in item.Controls ) {
              if(ctrl is HtmlInputText) {
                 string s = ((HtmlInputText)ctrl).Value;
                 // puts your more codes here
                 // ...
              }
     }
}
    }

#9


从头到尾的获取每个模板中的Input,我估计不是Lz想要的,他只是想要某个特定的RepeaterItem中的Input。

#10


我是想从头到尾获取每个模板的 Input ,同时前面的 Input 中,不能添加 runat = "server" ,这一点是个特珠的要求。

#11


按你的的要求,8楼正解!

#12


 foreach (RepeaterItem item in this.Repeater1.Items)
        {
            string value = ((TextBox)item.FindControl("控件ID")).Text;

        }

#13


引用 10 楼 macsales 的回复:
我是想从头到尾获取每个模板的 Input ,同时前面的 Input 中,不能添加 runat = "server" ,这一点是个特珠的要求。


不使用 runat=server ,当然用经典ASP 的方法了 Request.Form

注意:每个 input 必须具有 name,如果没有 name 你的input根本不会被提交,因为http协议是认 name 的,不知道 id,id是client的

string[] values = Request.Params.GetValues("__my_input");  // 这就是所有的值了

<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
<ItemTemplate>
<tr>
    <td> <input type="text" id="a" name="__my_input" />&nbsp; </td>
    <td> <input type="text" id="adf"  name="__my_input" />&nbsp; </td>
    <td> <input type="text" id="bba" name="__my_input" />&nbsp; </td>
    ...
    <td> <input type="text" id="N"  name="__my_input" />&nbsp; </td>
</tr>
</ItemTemplate>
</asp:Repeater> 

#14


1.
当然你可能是需要另一种用法,每个 input 的 name 不一样
常识:name 是可以相同的,相同的时候成组提交,但是 id 是不能相同的!

<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
<ItemTemplate>
<tr>
    <td> <input type="text" id="a" name=" __my_input$a" />&nbsp; </td>
    <td> <input type="text" id="adf"  name="__my_input$adf" />&nbsp; </td>
    <td> <input type="text" id="bba" name="__my_input$bba" />&nbsp; </td>
    ...
    <td> <input type="text" id="N"  name="__my_input$N" />&nbsp; </td>
</tr>
</ItemTemplate>
</asp:Repeater> 


 IList<string> list = new List<string>;
            foreach (string k in Request.Form.AllKeys)
            {
                if (k.IndexOf("__my_input$") == 0)
                {
                    list.Add(Request.Form[k]);
                }
            }
            // list 就是所有的值



2.
做Web开发,无论开发平台封装得如何,基础知识,如HTTP协议,Classic ASP 请求/响应一定要理解

#1


关注

#2


自已顶一下。

#3


你的Button1在Repeater的模板中还是在外面?
关键是要取得相应行的RepeaterItem,才能找到里面的Input。

#4


引用 3 楼 liuyeede 的回复:
你的Button1在Repeater的模板中还是在外面? 
关键是要取得相应行的RepeaterItem,才能找到里面的Input。


在 Repeater 的外面。

#5


你可以把Item部分写成一个用户控件,然后每个input都是用户控件中的某个属性(当然是一个集合类型的)的值。

在遍历时,只需要得到这个用户控件,然后找到这个用户控件所对应的属性区遍历就可以了。当然,这个集合也可以是你自己定义的。

#6


引用 3 楼 liuyeede 的回复:
你的Button1在Repeater的模板中还是在外面?
关键是要取得相应行的RepeaterItem,才能找到里面的Input。


同问

#7


你将按钮放到Repeaterd的模板中会好做许多。

#8


<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
<ItemTemplate>
<tr>
    <td> <input type="text" id="a"  runat=server />&nbsp; </td>
    <td> <input type="text" id="adf" runat=server/>&nbsp; </td>
    <td> <input type="text" id="bba" runat=server/>&nbsp; </td>
    ...
    <td> <input type="text" id="N" runat=server/>&nbsp; </td>
</tr>
</ItemTemplate>
</asp:Repeater> 


// 
protected void Button1_Click(object sender, EventArgs e)
    {

// 遍历所有 Item
foreach(RepeaterItem item in Repeater1.Items) {
     foreach(Control ctrl in item.Controls ) {
              if(ctrl is HtmlInputText) {
                 string s = ((HtmlInputText)ctrl).Value;
                 // puts your more codes here
                 // ...
              }
     }
}
    }

#9


从头到尾的获取每个模板中的Input,我估计不是Lz想要的,他只是想要某个特定的RepeaterItem中的Input。

#10


我是想从头到尾获取每个模板的 Input ,同时前面的 Input 中,不能添加 runat = "server" ,这一点是个特珠的要求。

#11


按你的的要求,8楼正解!

#12


 foreach (RepeaterItem item in this.Repeater1.Items)
        {
            string value = ((TextBox)item.FindControl("控件ID")).Text;

        }

#13


引用 10 楼 macsales 的回复:
我是想从头到尾获取每个模板的 Input ,同时前面的 Input 中,不能添加 runat = "server" ,这一点是个特珠的要求。


不使用 runat=server ,当然用经典ASP 的方法了 Request.Form

注意:每个 input 必须具有 name,如果没有 name 你的input根本不会被提交,因为http协议是认 name 的,不知道 id,id是client的

string[] values = Request.Params.GetValues("__my_input");  // 这就是所有的值了

<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
<ItemTemplate>
<tr>
    <td> <input type="text" id="a" name="__my_input" />&nbsp; </td>
    <td> <input type="text" id="adf"  name="__my_input" />&nbsp; </td>
    <td> <input type="text" id="bba" name="__my_input" />&nbsp; </td>
    ...
    <td> <input type="text" id="N"  name="__my_input" />&nbsp; </td>
</tr>
</ItemTemplate>
</asp:Repeater> 

#14


1.
当然你可能是需要另一种用法,每个 input 的 name 不一样
常识:name 是可以相同的,相同的时候成组提交,但是 id 是不能相同的!

<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
<ItemTemplate>
<tr>
    <td> <input type="text" id="a" name=" __my_input$a" />&nbsp; </td>
    <td> <input type="text" id="adf"  name="__my_input$adf" />&nbsp; </td>
    <td> <input type="text" id="bba" name="__my_input$bba" />&nbsp; </td>
    ...
    <td> <input type="text" id="N"  name="__my_input$N" />&nbsp; </td>
</tr>
</ItemTemplate>
</asp:Repeater> 


 IList<string> list = new List<string>;
            foreach (string k in Request.Form.AllKeys)
            {
                if (k.IndexOf("__my_input$") == 0)
                {
                    list.Add(Request.Form[k]);
                }
            }
            // list 就是所有的值



2.
做Web开发,无论开发平台封装得如何,基础知识,如HTTP协议,Classic ASP 请求/响应一定要理解

#15