2011-07-26 17 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