使用UpdatePanel时获取动态生成的HTML控件

时间:2009-10-15 06:00:43

标签: asp.net javascript html

我正在使用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生成的动态输入。

3 个答案:

答案 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]