2011-08-11 89 views
2

我有一個UpdatePanel,裏面有一個GridView。在gridview中的每個gridview上,我都有一個Twitter和FaceBook按鈕。.NET UpdatePanel和FaceBook/Twitter按鈕

gridview呈現與頁面加載按鈕很好,但是,一旦部分回發完成的更新面板Twitter和FaceBook按鈕不呈現。

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
<!-- search controls.... --> 
<asp:ImageButton ID="btnSearch" ImageUrl="~/img/button-search.gif" runat="server" /> 

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" EnableModelValidation="True" 
       BorderStyle="None" Font-Size="Small" GridLines="None" AllowPaging="True" ShowFooter="True" 
       Width="100%" OnPageIndexChanging="GridView1_PageIndexChanging"> 
       <RowStyle CssClass="row1" /> 
       <AlternatingRowStyle CssClass="row2" /> 
       <Columns> 
        <asp:TemplateField> 
         <ItemTemplate> 
          ... 
        <asp:TemplateField> 
         <ItemTemplate> 
          <asp:Literal ID="ltlTwitter" runat="server" Text='<%# GetTwitterURL(Eval("ID"), Eval("SomeText")) %>'></asp:Literal> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField> 
         <ItemTemplate> 
          <asp:Literal ID="ltlFacebook" runat="server" Text='<%# GetFacebookURL(Eval("ID")) %>'></asp:Literal> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" Visible="False" /> 
       </Columns> 
       <EmptyDataTemplate> 
        <strong>There are no offers for this search criteria.</strong> 
       </EmptyDataTemplate> 
      </asp:GridView> 
</ContentTemplate> 
     <Triggers> 
      <asp:PostBackTrigger ControlID="btnSearch" /> 
     </Triggers> 
    </asp:UpdatePanel> 

相關C#:

public static string GetTwitterURL(object ID, object text) 
{ 
    ...   
    StringBuilder sb = new StringBuilder(); 
    sb.Append("<div>"); 
    sb.Append("<a href=\"http://twitter.com/share\" " + 
     "class=\"twitter-share-button\" "); 
    sb.AppendFormat("data-url=\"{0}?ID={1}\" ", obj.Property, oID.ToString()); 
    sb.Append("data-via=\"xxx\" "); 
    sb.AppendFormat("data-text=\"{0}\"", xxx); 
    sb.Append("data-count=\"none\">Tweet</a>"); 

    sb.Append("</div>"); 

    return sb.ToString(); 

} 

public static string GetFacebookURL(object OfferID) 
{ 
    ... 

    return string.Format("<fb:like href=\"{0}?ID={1}\" " + 
     "send=\"false\" layout=\"button_count\" show_faces=\"false\" " + 
     "action=\"like\" font=\"tahoma\"></fb:like>", obj.Property, someInt); 
} 

此外,有問題的網頁是一個母版頁的子頁面。

這裏是額外的代碼隱藏

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     this.BindOffersGrid(true); 
    } 
} 

public List<Offer> CurrentOffersDataSet 
{ 
    get 
    { 
     object o = ViewState["CurrentOfferDataSet"]; 
     return (o == null ? new List<Offer>() : (List<Offer>)o); 
    } 
    set 
    { 
     ViewState["CurrentOfferDataSet"] = value; 
    } 
} 

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    GridView1.PageIndex = e.NewPageIndex; 
    GridView1.DataSource = this.CurrentOffersDataSet; 
    GridView1.DataBind(); 
} 

private void BindOffersGrid(bool ApplyRandomSort) 
{ 
    List<Offer> lstOffers = Offers.GetAllBySearchCriteria(
     Convert.ToInt32(ddlOfferCounty.SelectedValue), 
     Convert.ToInt32(ddlOfferTypes.SelectedValue), 
     Convert.ToDateTime(ddlOfferDate.SelectedValue), -1, true); 

    ... 
    //Some filtering of the dataset with Linq 
    ... 

    GridView1.DataSourceID = string.Empty; 
    this.CurrentOffersDataSet = lstFilteredOffers. 
     OrderByDescending(a => a.IsExclusive). 
     ThenBy(a => Guid.NewGuid()). 
     ToList(); 
    GridView1.DataSource = this.CurrentOffersDataSet; 
    GridView1.DataBind(); 
} 
+0

您是否嘗試過在項目綁定事件的代碼隱藏中設置它們?這可能是內聯腳本調用不完全兼容,但我不確定,因爲我傾向於遠離使用諸如此類的事情。 –

+0

@ Seany84:應該指出的是,你並不需要一個'StringBuilder'來處理'GetTwitterURL'方法中的連接;你可以通過調用'string.Format'並將字符串拆分爲多行連接。編譯器將在編譯時連接它的內容,然後連接操作將調用'string.Concat',它預先確定返回值的大小,然後將所有項複製到返回的字符串中。 – casperOne

+0

@casperOne 感謝您的提示。 – Seany84

回答

4

好吧,我下面的代碼添加在我的子頁面的盡頭,現在的Twitter和Facebook類似按鈕的部分回發後出現的。

<script type="text/javascript"> 

     var prm = Sys.WebForms.PageRequestManager.getInstance(); 
     prm.add_pageLoaded(pageLoaded); 

     var _panels, _count; 

     function pageLoaded(sender, args) { 
      if (_panels != undefined && _panels.length > 0) { 
       for (i = 0; i < _panels.length; i++) 
        _panels[i].dispose(); 
      } 

      var panels = args.get_panelsUpdated(); 

      if (panels.length > 0) { 

       updateFbLike(); 
      } 
     } 

     function updateFbLike() { 
      $.getScript("http://platform.twitter.com/widgets.js"); 
      FB.XFBML.parse(); 
     } 


    </script>