0

我有以下问题。

asp:textbox在页面上有一个运行服务器,其 id 为 saytxt 这个文本框在 a 中<div>,没什么特别的。IE:

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

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

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

在后面的代码中:

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

string test = blah.text

但结果本质上是-->“文本框中的值,文本框中的值”

即它有两次。我通过执行以下操作解决了这个问题:

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

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

但是,现在我遇到了这种情况,但问题是用户可以输入一个带有 ' , ' 的字符串,因此拆分变得很糟糕......

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

4

4 回答 4

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();
    }
于 2012-10-26T09:17:08.527 回答
0

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

于 2012-10-26T08:01:11.197 回答
0

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

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

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

于 2012-10-26T08:08:43.100 回答
-1

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

您可以轻松获得结果

String test = txt.Text;
于 2012-10-26T08:07:40.160 回答