我有以下问题。
我在页面上有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个出现吗?
答案 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;