2009-09-17 43 views
3

下面是我在做什麼。我在我創建的gridview的標題行中創建了兩個按鈕。這些按鈕是+頁面和 - 頁面。當頁面被擊中時,我刪除分頁,所有的數據都在頁面下方,頁面消失,頁面在那裏。停止雙回送

這是我的問題當我點擊+頁面時,我必須雙重回傳,因爲我的一行數據消失。我將提供下面的代碼。我能做些什麼來解決這個問題?

Dim bttnrempag As New Button 
    bttnrempag.ID = "bttnrempag" 
    bttnrempag.Text = "  Paging" 
    bttnrempag.CssClass = "bttnMinEG" 
    bttnrempag.ValidationGroup = "alone" 
    bttnrempag.Attributes.Add("onclick", "return Paging('1')") 

    Dim bttnallowpag As New Button 
    bttnallowpag.ID = "bttnallowpag" 
    bttnallowpag.Text = "  Paging" 
    bttnallowpag.ValidationGroup = "alone" 
    bttnallowpag.CssClass = "bttnAddEG" 
    bttnallowpag.Attributes.Add("onclick", "return Paging('0')") 

---------------------如何添加按鈕---------------- --------------------------

Dim row As New GridViewRow(-1, -1, DataControlRowType.Separator, DataControlRowState.Normal) 
    row.Cells.Add(cell) 
    cell.Controls.Add(bttnrempag) '36 
    cell.Controls.Add(bttnallowpag) 

--------------- -------------------------------------------------- -----------------------

function Paging(remove) { 
    var gridView = $get('<%=Gridview1.ClientID %>'); 
    var txt2 = $get('<%=TextBox2.ClientID %>'); 
    if (remove == '1') { 
     txt2.value = '1'; 
     __doPostBack('<%=UpdatePanel1.ClientID %>', ''); 
     return false; 
    } 
    else { 
     txt2.value = '0'; 
     __doPostBack('<%=UpdatePanel1.ClientID %>', ''); 
     return false; 
    } 

編輯

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate > 
     <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> 
     <asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
      AutoGenerateColumns="False" BackColor="White" BorderColor="#E7E7FF" 
      BorderStyle="None" BorderWidth="1px" CellPadding="3" 
      DataSourceID="SqlDataSource1" Font-Names="Comic Sans MS" Font-Size="XX-Small" 
      Caption = '<table border="" width="100%" cellpadding="3" cellspacing="0" bgcolor="#4A3C8C"><tr><td style = "font-size:X-large;font-family:Arial CE;color:White"><b>Ordering/Receiving Log</u></td></tr></table>' 
      Font-Bold="True" PageSize="15" > 
      <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" /> 

      <Columns> 
         Bound Data 
      </Columns> 
      <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" /> 
      <PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" /> 
      <EmptyDataTemplate> 
      <head> 
       <meta http-equiv="refresh" content="5;URL=/Corporate_newpo/ReceivingLog.aspx?"> 
      </head> 
       <script type="text/javascript" > 
        var count = 6; 
        var counter = setInterval("timer()", 1000); //1000 will run it every 1 second 

        function timer() { 
         count = count - 1; 
         if (count <= 0) { 
          clearInterval(counter); 
          //counter ended, do something here 
          return; 
         } 
         $get("timer").innerHTML = "The Table will Reload in " + count + " secs"; 
        } 
       </script> 
       <asp:Label ID="Label1" runat="server" Font-Bold="True" Font-Size="Large" 
        ForeColor="#993333" Text="No Data was Found for the Selected Filter"></asp:Label><br /><br /> 
       <span id="timer" style="font-size:medium;color:blue"></span> 
      </EmptyDataTemplate> 
      <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" /> 
      <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" /> 
      <AlternatingRowStyle BackColor="#F7F7F7" /> 
      <PagerTemplate> 
       <small 12px""="" style="font-size:xx-small; padding-right">Go To Page</small> 
       <asp:DropDownList ID="ddlPageSelector" runat="server" AutoPostBack="true" 
        Font-Size="XX-Small" Height="19px" Width="36px"> 
       </asp:DropDownList> 
       <asp:ImageButton ID="btnFirst" runat="server" CommandArgument="First" 
        CommandName="Page" SkinID="pagefirst" /> 
       <asp:ImageButton ID="btnPrevious" runat="server" CommandArgument="Prev" 
        CommandName="Page" SkinID="pageprev" /> 
       <asp:ImageButton ID="btnNext" runat="server" CommandArgument="Next" 
        CommandName="Page" SkinID="pagenext" /> 
       <asp:ImageButton ID="btnLast" runat="server" CommandArgument="Last" 
        CommandName="Page" SkinID="pagelast" /> 
      </PagerTemplate> 
      </asp:GridView> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

所以你可以看到,當一個或另一個被擊中我設置一個文本框爲某個值,然後我做了部分回發到我的GridView這是在UpdatePanel中。

+0

控制@Eric - 標籤的東西實際使用。 asp.net標籤涵蓋了vb.net和c#爲您的目的。 – overslacked 2009-10-02 19:15:06

回答

0

我發現了一個非常好的解決方案。它附加它自己的處理程序,但我想這也可以修復。

using System.Linq; 

private void GridView_OnItemDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     var buttons = e.Row.Cells.OfType<DataControlFieldCell>().SelectMany(item => item.Controls.OfType<ImageButton>()); 
     foreach (ImageButton imageButton in buttons) 
     { 
      var argument = imageButton.CommandName + "$" + imageButton.CommandArgument; 
      imageButton.OnClientClick = this.Page.ClientScript.GetPostBackClientHyperlink(this.GridView, argument) + "; return false;"; 
     } 
    } 
} 
2

我懷疑這是因爲你被稱爲「__doPostBack」的方法。按鈕的正常默認點擊行爲將執行異步回發,您可能會再次執行該操作。嘗試刪除它,看看它是如何去。

+2

但是,通過'return false',他應該阻止默認行爲。 – Joel 2009-09-17 15:08:33

+0

不,我得到了同樣的結果。 – Eric 2009-09-17 15:08:49

+0

是的。喬爾是對的。 – Eric 2009-09-17 15:09:20

1

你可以嘗試把在RowDataBound事件聲明的按鈕點擊屬性?

乾杯。

0

試試這個,(我不知道爲什麼你用javascript):

bttnrempag.onclick += bttnrempag_Click; 

protected void bttnrempag_Click(object sender, EventArgs e) 
{ 
    //handle the removal of paging or whatever. 
} 
1

試着改變你的< ASP:ImageButtons >是普通的HTML <IMG>標籤。

我遇到過這種事情之前很難診斷,甚至更難解釋。請參閱herehere瞭解可能有所幫助的一些錯誤行爲。如果你有<IMG>標籤與空白SRC屬性,那麼這個鏈接我提供了可能的解釋這個問題。如果您沒有任何空白標籤,請繼續閱讀我的工作。

在我的具體情況中,它只發生在某些服務器上(在某些客戶端),而不是其他人,所以我找不到任何具體的代碼問題。我的解決方法是將我的< asp:ImageButtons >更改爲常規<img>標記,其中包含可調用函數執行回發的JavaScript單擊事件,與您的Paging()函數非常相似。

由於某種原因,我發現一個< asp:ImageButton >帶有客戶端onclick事件返回:confirm('你確定嗎?「);如果confirm()返回false,則會停止回發,但是,在手動調用__doPostBack後,您在Paging()函數中執行的操作不會始終停止頁面第二次回發。

+0

你給出的鏈接指出它發生的原因(但我不知道爲什麼它只會在某些服務器上......除非圖像路徑無效或ASP.NET無法訪問圖像...如果您在虛擬目錄中開發,但部署到Web應用程序根目錄,則圖像無效的路徑會一直髮生。 – 2009-10-02 20:33:00

0

你必須爲你的ImageButtons提供一張圖片。否則,呈現的HTML將生成<img src="">標記,並且在呈現該標記時,它將導致回發。嘗試一下。

1

請在HTML看,因爲它是在網頁上呈現:

每當它是目前

<img src=""/> 

雙回送可能發生,一些瀏覽器...

可以解決這個問題,爲每個按鈕設置一個默認的空白圖像

<asp:ImageButton ImageUrl="~/Images/blank.gif"...> 

不管怎麼說,這個命令可以在Immediate Window如果你把一個斷點內Page_Load,讓你進入indentify導致回發

Page.Request.Params["__EVENTTARGET"];