在后面的代码中查找控件 - 多个结果控件 - 第n次出现

时间:2012-10-26 07:57:57

标签: c# asp.net

我有以下问题。

我在页面上有asp:textbox,运行时服务器的id为txt 此文本框位于<div>,没什么特别的。即:

<div>
 <asp:TextBox id="txt" runat="server"></asp:TextBox>
</div>

问题是有一些java脚本,当你按下相应的按钮时,它会加倍(复制)div。这是设计的。它意味着。

当你点击保存但在asp:Button的页面底部时,它找不到我需要的值,因为它会返回两个结果。

在背后的代码中:

(Textbox) blah = (Textbox)senderbutton.FindControl("txt");

string test = blah.text

但结果基本上是 - &gt; “文本框中的值,文本框中的值”

即。它有两次。我通过以下方式解决了这个问题:

string[] test = blah.text.split(new[] { ',' })

然后只调用数组中的第二个值或其他任何内容。

但是,现在我遇到了这种情况,但问题是用户可以在其中输入一个带有','的字符串,因此拆分会变成垃圾......

那么我可以找到一个带有id的控件,但只能在后面的代码中找到它的第n个出现吗?

4 个答案:

答案 0 :(得分:1)

似乎您需要为输入控件的每个副本指定不同的名称(例如 txt0,txt1 ...)。 你可以在你的asp按钮

的客户端点击(在表单提交之前)使用javascript up来执行此操作

- Javascript方法

    function ModifyName() {
        var x = 0;
        $("input[name='txt']").each(function () {
            $(this).attr("name", $(this).attr("name") + x);
            x++;
        });
    }

- asp:按钮

<asp:Button ID="btnSubmit" runat="server" Text="Submit" 
   OnClientClick="ModifyName();" onclick="btnSubmit_Click" />

所以在代码背后你可以得到像这样的值......

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        var resultArr = Request.Form.AllKeys.Where(x => x.Contains("txt"))
            .Select(x => Request.Form[x]).ToArray();
    }

答案 1 :(得分:0)

不是一个非常好的解决方案,但您可以直接在回发时检查Request.Form集合并编写一些代码来处理动态添加的文本框字段。

答案 2 :(得分:0)

最好的解决方案是:避免在js中复制div。既然你说“这是设计的。它意味着。”(即使我真的怀疑它),还有一些替代解决方案:

(1)不要使用表单的默认提交行为。也就是说,在保存按钮的click(js)事件中,组织表单中的数据然后提交。

(2)修改第二个(复制的)文本框的id,使其id与原始id不同,然后在代码后面获取数据。

答案 3 :(得分:-1)

当您可以从后面的代码直接访问FindControl控件时,我不确定为什么使用txt方法来查找控件。

您可以轻松获得结果

String test = txt.Text;