2011-05-08 25 views
0

我有一個用戶控件,所調用的頁面。 的僞代碼如下 主頁如何識別和存儲文本框的改變細節,並呼籲它在Java腳本在asp.net

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> 

<%@ Register TagPrefix="test" TagName="newcontrol" Src="~/UserControl.ascx" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head runat="server"> 
    <title></title> 
</head> 

<body> 
<script id="testscript" language="javascript" src="CheckJavaScript.js"> </script> 
    <form id="form1" runat="server"> 
    <div> 
     <test:newcontrol ID="testingNewControl" runat="server" /> 
     <asp:Button ID="btnSave" runat="server" Width="100" OnClientClick="CallingScript()" /> 
    </div> 
    </form> 

</body> 
</html> 

用戶控制

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UserControl.ascx.cs" 
    Inherits="WebApplication1.UserControl" %> 
<div id="usertest" runat="server"> 
    <table> 
     <tr> 
      <td> 
       <asp:Label ID="label1" Text="Name" runat="server"> 
       </asp:Label> 
       <asp:TextBox ID="text1" runat="server"></asp:TextBox> 
      </td> 
     </tr> 
    </table> 
    <table> 
     <tr> 
      <td> 
       <asp:Label ID="label2" Text="City" runat="server"> 
       </asp:Label> 
       <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
      </td> 
     </tr> 
    </table> 
</div> 

我想調用JavaScript,如果在文本框中的值的任何變化,用戶點擊時「保存」按鈕。

如何識別文本框中的值是否有變化。 此外,我已經在用戶控件中顯示兩個文本框,而會有很多文本框。 我必須顯示警報爲「文本框1中的值已更改」或「文本框2中的值已更改」

我該如何繼續。

回答

1

對於通用解決方案,您需要一個跟蹤舊值的解決方案。解決方案的典型輪廓是

  1. 有一個隱藏字段來存儲要跟蹤的控件的舊值。您需要開發一些方案來序列化/反序列化名稱/ id值對。它可以像用逗號分隔的冒號分隔的名稱/值對列表一樣簡單。雖然,你可能會考慮JSON。
  2. 對服務器端的代碼,對於給定父控件,通過所有孩子遞歸循環和存儲他們的原始值(與名稱/ ID一起)進入隱藏字段。出於性能的原因,您可以接受控制類型來保存(或讓您的邏輯根據其類型跳過控件)。
  3. #2只有在顯示頁面時才需要完成,即它應該在回發中發生。但是,當然,您可以遇到一些情況,即切換面板的可見性,然後希望從面板跟蹤控件。因此,爲了處理這種情況,您需要創建一個名稱 - 值對字典,以便將控件存儲在頁面生命週期中。您可以註冊控件進行跟蹤,並從跟蹤中取消註冊。
  4. 有一個客戶端(Java的腳本)啓動代碼,將解串從隱藏字段,建設名值字典和附着變更事件處理程序被監視控制所要檢查的原始值。
  5. 在回送週期中,在服務器端,必須將原始值恢復到字典,以便服務器代碼可以註冊/取消註冊它們。有些時候,這些值需要重新註冊 - 例如,您的原始值爲「A」,更改爲「B」並保存(但在編輯模式下UI仍保持打開狀態),因此您可能需要重新註冊。將原始值註冊爲「B」。

在我而言,這整個解決方案被打包在該基地頁面級別。所以頁面開發人員需要做的是翻轉標誌來指示控制跟蹤&通過註冊/取消註冊來識別控件 - 基本頁面將負責構建原始值字典,註冊隱藏字段,注入js腳本調用等。

1

一種方式來做到這一點是每一個文本框與它的原始值在頁面上隱藏字段,並具有隱藏字段的名稱類似於文本框。例如,如果您有一個名爲「username」的文本框,則會有一個名爲「username_orig」的相應隱藏字段。然後在表單提交中,您可以使用輸入的jquery選擇器簡單地檢查所有輸入標記,並與輸入標記名稱+「_orig」進行比較,看看它們是否相同。如果他們不是,那麼箱子的名稱和價值已經改變。

0

將所有初始值存儲在數據集中。

提交時,請根據數據集的值檢查每個值。

相關問題