2010-10-27 51 views
2

對於我的內部網頁工作,我顯示基於SQL表中的條目的數據網格(不是直接的,但對條目有一些處理)。asp:LinkBut​​ton代碼在其他代碼之後打開新的瀏覽器窗口/選項卡

DataGrid中的每一行都有一個用戶單擊的按鈕。我需要這個按鈕來打開一個新的窗口或標籤(我相信我不能決定,因爲這是基於瀏覽器配置),並更改SQL表中的值來表示按鈕被單擊。

如果我使用asp:Hyperlink,那麼頁面打開很好,但我不知道如何更新SQL。反之亦然,如果我使用一個asp:LinkBut​​ton我可以得到更新的SQL,但不能得到一個新的頁面打開。

我試圖做什麼不可能?

感謝

編輯:

我已經試過這兩個在我的cs文件,但既不工作:

ClientScript.RegisterStartupScript(GetType(), "openwindow", "window.open('" + url + "','_preview'"); 

Response.Write("<script type='text/javascript'>detailedresults=window.open('" + url + "');</script>"); 

回答

0

可以使用的LinkBut​​ton和使用OnClientClick屬性設置Java腳本,將在新的瀏覽器窗口中打開網頁。此腳本必須返回true,以便回發可以發生,並且您可以處理服務器端的單擊事件以更新您的數據庫。

IMO,更好的辦法是使用超鏈接並在新的瀏覽器窗口中打開頁面。但是,您必須在打開頁面時傳遞查詢字符串參數(如第2頁),以告知新頁面它應該更新數據庫。所以打開頁面的URL將會是"page2.aspx?recordId=xyz"。和page2.aspx.cs內,你將有代碼,如

protected void page_load(object sender, EventArgs e) 
{ 
    if (!IsPostback) 
    { 
     var recordId = Response.QueryString["recordId"]; 
     if (!string.IsNullOrEmpty(recordId)) 
     { 
     // update database 
     ... 
     } 
    } 
    ... 
} 

從安全角度來看,你可能要包括的參數值內超時和加密整個事情。

+0

嘗試過多種方法來使用ClientScript.RegisterStartupScript /的Response.Write,我沒有讓他們的工作,這可能是到不正確的使用,但最終我VinayC的建議去了。實施了新的.aspx頁面傳遞一個QueryString,然後這個頁面更新SQL並重定向到URL。完全滿足我的需求。沒有安全問題因爲這純粹是內部工作網站。謝謝! – neildeadman 2010-10-27 09:36:10

+0

@neildeadman,RegisterStartupScript(用於註冊腳本以打開瀏覽器頁面)本可以工作,但是這種方法的主要問題是彈出窗口阻止程序 - 使用啓動腳本打開的新頁面將被視爲廣告/彈出窗口並會被阻止。嘗試其他解決方案時,您可能會遇到同樣的問題。 – VinayC 2010-10-27 10:24:57

0

試試這個

Response.Write("<script type='text/javascript'>detailedresults=window.open('PAGE NAME.aspx');</script>") 

編輯:

您可以鏈接按鈕設置命令名稱和rowcocommand事件執行代碼

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
     { 
      if (e.CommandName.Equals("commandname for linkbutton")) 
      { 
       //update code 
       Response.Write("<SCRIPT language=\"javascript\">open('Yourpage.aspx','_blank','top=0,left=0,status=yes,resizable=yes,scrollbars=yes');</script>"); 

     } 
    } 
0

你可以使用你的LinkBut​​ton,並呼籲RegisterStartupScript上回發到頁面加載執行這樣的事情

的.aspx:

<asp:LinkButton OnClick="OnButtonClick" Text="Update" runat="server" /> 

.aspx.cs:

protected void OnButtonClick(object sender, EventArgs e) 
{ 
    ClientScript.RegisterStartupScript(GetType(), "openwindow", "<script type=text/javascript> window.open('About.aspx'); </script>"); 
} 

您需要將整個腳本元素提供給RegisterStartupScript。

0

Heperlink將不會在點擊服務器端事件時收到服務器端事件,因此您不會回發執行SQL任務,並且通過使用LinkBut​​ton,您可以在新窗口或選項卡中打開該頁面 需要在下面添加Grid_RowBoundEvent中的小代碼 例如:LinkBut​​ton.OnClientClick =「window.open('http://www.google。COM');「。 網址U可以在代碼中提到的每回合需求量的

,並再次落後U將得到服務器端事件DERü可以做你的SQL任務

希望這將是幫助全你

2
<asp:TemplateField HeaderText="Action"> <ItemTemplate> 
<asp:LinkButton ID="lbtnConfigureSurvey" runat="server" CausesValidation="False"  
CommandName="ConfigureSurvey" CommandArgument='<%# Eval("intSurveyID") %>' 
OnClientClick="aspnetForm.target ='_blank';">           
</asp:LinkButton> 
</ItemTemplate>        
</asp:TemplateField> 

protected void gvSurveyList_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
if (e.CommandName == "ConfigureSurvey") 
{ 
    Response.Redirect('Your page url'); 
} 
} 
+0

嘿拉古比爾,歡迎:)以一些解釋開頭總是好的,然後用代碼跟着。如果你能爲你的答案添加一些評論,這將對未來的讀者有所幫助,這將是非常好的。 – Amar 2012-11-06 19:24:38

相關問題