2011-03-17 30 views
1

我有一個顯示記錄列表的ASP.Net頁面名稱ListView.aspx。它使用jQueryUI來顯示單個記錄模態對話框的細節。模態對話框的內容是另一個名爲DetailsView.aspx的asp.net頁面。它是這樣顯示的:服務器端ASP.net代碼導致從jQueryUI模式對話框中完整回發

function DisplayDetails(promoID) { 

      $("#promotionDetailsDialog").dialog({ 
       height: 400, 
       width: 600, 
       modal: true 
      }).load("DetailsPage.aspx?ID=" + promoID); 

      return false; 
     } 

顯示在對話框中的DetailsView頁面很簡單。

<body> 
    <form id="form1" runat="server"> 
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> 
    <br /> 
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> 
    </form> 
</body> 

DetailsView Button1_Click事件處理程序中的服務器端代碼進行簡單的數據庫調用。我的問題是,在模式對話框上的按鈕回發後,瀏覽器將從ListView重定向到DetailsView。有沒有辦法阻止?

+1

避免完整的postball,通過ajax進行數據庫調用..你用jQuery做的所有事情都不會反映在服務器端。所以,如果你想維護狀態,一旦頁面重新加載,你將不得不再次執行它 – 2011-03-17 16:52:39

回答

0

事情是回傳是簡單的頁面後。因此,在這裏我們發佈了DetailsPage.aspx文章,所以很自然你會從那個頁面得到響應。

TheSuperTrump是正確的 - 最好的解決方案是通過ajax執行數據庫調用。您可以爲此創建一個sipmle Web服務,稍後您可以使用它來解決類似的問題,並將WebMethod屬性應用於某些Service方法,以便通過ajax從js調用它。

[WebMethod(EnableSession = true)] 
public string GetPromotionMessage(int employeeId) 
{ 
    return String.Format("Congratulation! You're promoted {0}", Employee.GetEmployeeByID(employeeId).FullName); 
} 

,然後把它在你的客戶端JS那樣

ServiceNamespace.ServiceName.GetPromotionMessage(parseInt(employeeId), function (result) { ... }, function (exception) { alert(exception.get_message()); }); 

此屬性將允許你使用你的方法,會話變量(可能是你需要用它來訪問數據庫 - 無屬性的運行時將引發異常試圖訪問會話)

此功能

function (exception) { alert(exception.get_message()); } 

將被調用,如果即使沒有try-catch塊,您的服務方法中也會發生異常。

函數function(result){...}將在您收到服務方法響應後調用。如果您的服務方法返回一些更復雜的數據,則結果將包含與您的服務方法返回類型具有相似結構的json數據。 (它將包含與服務器上相同名稱的公共屬性,但如果數據太Comlpex則會有一些複雜性)。

還有一種類似的方法可以用[WebMethod]屬性標記Page方法。

還有一個更簡單的用ASP玩解決它的方法:UpdatePanel中,並設置Button1的Click事件,因爲它的異步回發觸發器一樣,

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 

    <ContentTemplate> 
    ... 
    </ContentTemplate> 

    <Triggers> 
    <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" /> 
    </Triggers> 

</asp:UpdatePanel> 

應該暫停完全回發,並重新加載只是在部分部分。 !!!注意:更新面板需要頁面或母版頁上的ScriptManager控件,否則您將獲得運行時異常。

如果你會提供更多的代碼我也可以顯示ajax服務webMethod調用的例子,但我想你可以很容易地谷歌。

但imho它看起來很簡單,但更新面板往往不是最好的解決方案。我寧願玩服務/頁面webMethod調用。

相關問題