2013-05-11 56 views
0

我有以下代碼:ScriptManager的問題在asp.net上提交

<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="btnSave" EventName="Click" /> 
    </Triggers> 
    <ContentTemplate> 
     <asp:Button ID="btnSave" runat="server" Text="Submit"/> 
     <asp:Panel ID="pnlMyView" runat="server"> 
      <asp:GridView Control here... 
     </Panel> 
      <asp:Panel ID="pnlInfo" runat="server" Visible="False"> 
       <div> 
        Some information... 
       </div> 
     </Panel> 
    </ContentTemplate> 
</asp:UpdatePanel> 
<asp:UpdateProgress ID="UpdateProgress1" runat="server"> 
    <ProgressTemplate> 
     Update in progress... 
    </ProgressTemplate> 
</asp:UpdateProgress> 

<script language="javascript" type="text/javascript"> 
$(window).load(function() { 
    $("input:submit[id$='btnSave']").click(function() { 
    //jQuery code to validate gridview enteries... 
}) 
}); 
</script> 

步驟:

1.Refresh頁面或加載頁面首次並點擊提交按鈕,以驗證在GridView中的條目

2.正確完成驗證並將更改保存到數據庫。

3.Made在GridView的條目的一些變化,並點擊提交按鈕

4.Validation未能成行,並保存在數據庫中的項(即錯誤輸入)。

5.刷新頁面,即按F5現在一切工作正常。

如何在步驟4

----------------- PS解決問題--------------- -

其實我有兩個面板pnlMyView和pnlInfo.So在頁面加載時我只對pnlMyView可見並且其他是不可見的。 一旦我移動到pnlInfo並返回到pnlMyView並提交Nothing驗證發生。

感謝

+0

以btnSave出來的內容模板,並保持觸發內(因爲它是現在),從我的經驗腳本管理器(客戶端對象)註冊的Ajax的腳本在第一次點擊btnSave之後,在每次按下它後,由於它在內容模板中,只有那部分頁面進程的jquery函數在第一次之後無法收聽事件。 – Vishal 2013-05-11 18:31:39

回答

0

嘿朋友,我得到了solution.I使用live事件,現在一切工作正常。

$("input:submit[id$='btnSave']").live("click", function(event) { 

感謝大家的響應

1

的問題是,你的HTML被重新加載,從而按鈕上的事件處理程序丟失。

你可以試試下面的代碼向你保證,在處理程序停留在地方:

<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
<div id="root"> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="btnSave" EventName="Click" /> 
     </Triggers> 
     <ContentTemplate> 
      <asp:Button ID="btnSave" runat="server" Text="Submit"/> 
      <asp:Panel ID="pnlMyView" runat="server"> 
       <asp:GridView Control here... 
      </Panel> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    <asp:UpdateProgress ID="UpdateProgress1" runat="server"> 
     <ProgressTemplate> 
      Update in progress... 
     </ProgressTemplate> 
    </asp:UpdateProgress> 
</div>  
<script language="javascript" type="text/javascript"> 
$(window).load(function() { 
    $("input:submit[id$='btnSave']").on("click", ".root", function() { 
    //jQuery code to validate gridview enteries... 
}) 
}); 
</script> 

這樣做是不同的登記處理。您需要將UpdatePanel封裝在類root的div中。然後你註冊的處理程序是這樣的:

$("input:submit[id$='btnSave']").on("click", ".root", function() {}); 

這告訴了jQuery registere稱爲根元素上的處理程序,但只執行input:submit...時執行它。

由於div未被刪除,所以即使在替換HTML之後,仍然會檢測到處理程序。

這些類型的事件被稱爲delegated events。您可以在jQuery的文檔中閱讀更詳盡的解釋:http://api.jquery.com/on/

+0

我做了同樣的事情,但仍然有問題。我已經改變了我的問題,請底層看看。謝謝 – Sukhjeevan 2013-05-12 07:28:58

0

更好地利用Button控件的屬性OnClientClick

<asp:Button ID="btnSave" runat="server" Text="Submit" OnClientClick="return validate()" /> 

function validate(){ 
//jQuery code to validate gridview enteries... 
//if validation isn't succeeded return false, otherwise return true 
}