小编And*_*206的帖子

UpdateTnel中的AddThis控件 - 确保在异步回发后正确呈现它们

首先,我可以提前为我的帖子质量道歉,因为这是我第一次在这里发布.我过去在这个网站上找到了一些非常有用的答案,因此我发现自己有能力回馈我以为我会试一试.

在我的头撞墙一段时间,并在网上找到很少的可靠信息后,我终于找到了一个对我有用的问题的答案并回答了几个问题,所以我想我会分享我的发现.

场景:

  • .Net用户控件,使用唯一指定的url和title属性呈现addthis工具箱.
  • 一个UpdatePanel,包含一个显示多行的转发器,每行包含一个工具箱用户控件的实例.
  • 每次显示更多结果时,刷新UpdatePanel的"显示更多结果"按钮.

问题:

首次显示页面时,一切都很好.所有工具箱都能正确显示并按预期工作.但是,按下按钮并刷新UpdatePanel时,工具箱会消失.

方案:

首先,我很快从其他人的问题和答案中确定我需要使用PageRequestManager将EndRequestHandler添加到我的页面,该PageRequestManager将处理异步回发请求并触发一些javascript来呈现我的工具箱.

接下来我需要弄清楚这个javascript应该是什么.

我在网上找到了许多针对这个问题的解决方案,大多数使用window.addthis = null并使用jquery getScript()来重新运行addthis javascript,但这些都没有解决问题.我一直回到AddThis网站上的文档,该网站声明你应该使用addthis.toolbox()来使用javascript渲染你的工具箱,这似乎对我不起作用.

然后我有一个灯泡时刻.似乎addthis.toolbox()函数忽略了addthis:url和addthis:我在工具箱div中设置的title属性,我意识到我需要通过在共享中定义它们将这些属性传递给addthis.toolbox()配置对象.从那以后,事情变得容易多了.

最终解决方案分为3部分.

首先是在用户控件中定义的tollbox DIV,它具有唯一的ID并包含addthis:url和addthis:title属性:

<div id="toolBoxWrapper" class="toolBoxWrapper" runat="server">
    <div id='<%="toolBox_" + ControlId%>' class="addthis_toolbox"  addthis:url='<%=AssociatedUrl%>' addthis:title='<%=AssociatedName%>' >
        <a class="addthis_button_email"></a>
        <a class="addthis_button_facebook"></a>
        <a class="addthis_button_twitter"></a>
        <a class="addthis_button_print"></a>
        <a class="addthis_button_compact"></a>
        <a class="addthis_counter addthis_bubble_style"></a>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

接下来,我在控件中创建了一个PreRender处理程序,以创建包含特定于控件的addthis共享配置对象的定义的javascript.这不能只包含在ascx页面中,因为它不起作用.必须使用服务器代码中的RegisterStartupScript创建它:

    protected void Page_PreRender(object sender, EventArgs e)
    {
        // This code creates a control specific addthis_share config object so that
        // the toolbox can be re-created after an ajax async …
Run Code Online (Sandbox Code Playgroud)

.net c# updatepanel addthis

5
推荐指数
1
解决办法
1966
查看次数

标签 统计

.net ×1

addthis ×1

c# ×1

updatepanel ×1