2011-07-26 15 views
1

我的工作增加了模式弹出到ASP.NET页。弹出窗口会给用户一些文本框来填写,一个取消和提交按钮。ASP.NET AJAX模式弹出 - 动态控制值

我遇到的问题是,文本框被动态创建,根据需要文本框什么,他们所要求的将根据点击网页上的内容更改的数量。当试图检索在模态窗口上单击“提交”后输入的值(该窗口不绑定到模态窗口以便它将执行回发)时,文本框消失了,并且无法检索数据。

下面是该模式弹出代码:

   <div id="divModalContainer"> 
        <div id="PromptContentHeader"> 
         <asp:Label ID="lblHeader1" runat="server"> 
         </asp:Label> 
         <br /> 
         <asp:Label ID="lblHeader2" runat="server"> 
         </asp:Label> 
         <asp:Label ID="lblPassFileName" runat="server"> 
         </asp:Label> 
        </div> 

        <!--<ul id="ulTabModalPrompt" class="tabnav" runat="server"> 
        </ul>--> 
        <div id="divModalPrompts" runat="server"> 
         <table id="PromptTable" runat="server"> 
         </table> 
        </div> 
        <div id="divModalButtons" style="width:230px;"> 
         <div style="float:left"> 
          <asp:Button ID="btnCancelDocPrompts" runat="server" Text="Cancel" OnClick="btnCancelDocPrompts_Click" /> 
         </div> 
         <div style="float:right"> 
          <asp:Button ID="btnSubmitDocPrompts" runat="server" Text="Submit" OnClick="btnSubmitDocPrompts_Click" /> 
         </div> 
        </div> 
       </div> 
      </asp:Panel> 

      <ajaxtoolkit:ModalPopupExtender ID="modalDocPrompt" runat="server" 
        TargetControlID="btnOpenPromptWindow" 
        PopupControlID="panelPrompts" 
        OkControlID="btnHiddenOkButton" 
        CancelControlID="btnCancelDocPrompts" 
        BackgroundCssClass="ModalPromptBackground" 
        DropShadow="true" /> 

      <asp:Button ID="btnOpenPromptWindow" runat="server" Text="Test Modal" Style="display: none;" /> 
      <asp:Button ID="btnHiddenOkButton" runat="server" Text="Test Modal" Style="display: none;" /> 

显示的模式弹出之前,行会被添加到PromptTable,每行有一个标签和文本框。

btnSubmitDocPrompts_Click方法将尝试遍历PromptTable中的每一行并检索输入的值,但是一旦单击提交,就不再有行。

感谢您的帮助!

回答

2

你可以尝试使用JavaScript(如果存在的页面加载时会得到回发)写的文本框的一个HiddenField的值。

你必须编码值,并用逗号将它们分开(或类似),然后解析值超出服务器端。

编辑:

OK,我会亲自使用jQuery的JavaScript的一部分,但我假设你正在做的 '原始'。

说您的标记(少数添加动态文本框)看起来是这样的:

<input type="hidden" id="hdnFormValues" /> 
<div id="dynamicForm"> 
    <div id="textBoxArea"> 
     <input type="text" id="newField1" /><br /> 
     <input type="text" id="newField2" /><br /> 
     <input type="text" id="newField3" /><br /> 
     <input type="text" id="newField4" /><br /> 
    </div> 
    <input type="submit" onclick="saveValues()" value="Save Values" /> 
</div> 

,你有一个JavaScript函数,看起来像这样:

function saveValues() 
    { 
     theBoxes = document.getElementById('textBoxArea').getElementsByTagName('input'); 
     hdnValues = document.getElementById('hdnFormValues'); 
     hdnValues.value = ""; 

     for(var i = 0; i < theBoxes.length; i++) 
     {    
       hdnValues.value += escape(theBoxes[i].value) + '|';   
     }   
    } 

然后,当提交按钮变按下后,HiddenField的值将变为管道分隔的编码值字符串。

例如,如果文本框1〜4具有的数值:

I'm

encoding

dynamic

values!

那么HiddenField的值将成为I%27m|encoding|dynamic|values%21|

记住,你需要输出ASP.NET服务器侧上方的功能。请参阅ScriptManager文档以了解如何执行此操作。原因是HiddenField的ID是动态的,所以你不能在运行前(可靠地)预测它。

最后,在接收回发的服务器端代码中,将分隔字符串分开并对其进行解码,然后根据这些值进行操作。

这里最大的问题是安全性和验证 - 虽然我编码了字符串,但您需要自己进行验证和安全检查!

+0

感谢您的建议。你能给我一个如何做到这一点的例子吗?我熟悉JavaScript,但没有经验。 – Greg

+0

谢谢!我其实比JQuery更了解这一点。我尝试了一下创建模式弹出窗口的选项,看起来它可能会有所帮助,但对我来说,这只是另一层,它使得难以找出问题。这正是我需要开始的。我很感激! – Greg