我正在使用javascript动态生成HTML元素。这些控件位于浏览器的更新面板中。
由于某种原因,我无法访问Page.Form []数组中的那些元素。
这是否有原因?
我当前的解决方案创建了一个字符串数组,将其转换为JSON字符串,将其存储在隐藏变量中,该隐藏变量会在服务器端代码中定义隐藏字段后发布回服务器。
标记
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div id="dynamicInputsGoHere" class="hiddenContent" runat="server"></div>
</ContentTemplate>
创建输入的Javascript
for (i = currentSize; i < numberInputsToCreate; i++) {
html += "<input type='text' id='inputNum" + i.toString() + "' />";
}
$('#dynamicInputsGoHere').append(html);
我正在尝试访问更新面板发回时由javascript生成的动态输入。
答案 0 :(得分:4)
您需要为输入元素添加name
attribute,以便随表单提交(并在Request.Form
中提供):
for (var i = currentSize; i < numberInputsToCreate; i++) {
var name = "inputNum" + i;
html += '<input type="text" id="' + name + '" name="' + name + '" />';
}
$('#dynamicInputsGoHere').append(html);
然后在服务器上访问它们:
string value0 = Request.Form["inputNum0"];
string value1 = Request.Form["inputNum1"];
string value2 = Request.Form["inputNum2"];
您最好在隐藏字段(numberInputsToCreate
)中发送type="hidden"
并在服务器上使用循环来取出值。
答案 1 :(得分:1)
我认为无法访问代码隐藏中javascript创建的HTML元素。
这些控件没有runat =“server”属性。因此,不可能在代码隐藏中获得这些控件。
答案 2 :(得分:0)
问题:此编程是否存在于MasterPage或UserControl或实现INamingContainer
的任何其他控件中?检查您的renedered HTML并确保您确实拥有<div id="dynamicInputsGoHere">
,因为您将其设置为runat="server"
,您很可能会拥有<div id="ctrl0_dynamicInputsGoHere">
之类的内容,因此您的jQuery将无法执行
一旦你验证了你的脚本找到了输入,你就可能想要用scriptmanager注册脚本(因为你使用的是UpdatePanel,所以是安全的。)
ScriptManager.RegisterStartupScript(this, this.GetType(), "createinputs", @";for (var i = currentSize; i < numberInputsToCreate; i++) {
var name = ""inputNum"" + i;
html += '<input type=""text"" id=""' + name + '"" name=""' + name + '"" />';
}
$('#dynamicInputsGoHere').append(html);", true);
当您在代码中查找值时,您必须检查Request.Form["inputNum"+i]
。