c# - .NET 更新面板和 FaceBook/Twitter 按钮

标签 c# .net facebook twitter updatepanel

我有一个 UpdatePanel,里面有一个 gridview。在 GridView 中的每个 GridView 行上,我都有一个 Twitter 和 FaceBook 按钮。

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);
}

此外,相关页面是母版页的子页面。

这是额外的 Conceal 代码:

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();
}

最佳答案

好的,我在我的子页面的最后添加了以下代码,现在在部分回发后出现了 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>

关于c# - .NET 更新面板和 FaceBook/Twitter 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7029948/

相关文章:

javascript - 使用 Node Express 后端的移动客户端 Facebook 登录

c# - 将一个 UTF8 编码数据的内存流写入另一个 C# 的末尾

C# 外部数据(类似于 iOS Plist)

c# - 如何使用 WebHttpBinding 在 WCF 的 uri 路径中使用强类型参数

c# - CompileAssemblyFromDom 抛出拒绝访问异常

facebook - 应用因 AdSupport.framework 而被拒绝

c# - 获取列表中重复项的计数

c# - 重构 PropertyChangedEventHandler

c# - 为什么backgroundworker取消按钮没有取消backgroundworker操作?

iphone - Facebook 应用程序中的 titleView 图标(像那样绘制的算法?)