关键词搜索

源码搜索 ×
×

用户控件 + ScriptManager 实现点击后弹出窗口且窗口坐标追随点击位置效果

发布2012-09-11浏览3041次

详情内容

我之前做了一个用于打标签的用户控件,结合ASP.NET的ScriptManager,可以实现页面部分更新的AJAX效果。这段时间忙着网站改版,这个用户控件不想就那么丢掉,所以想稍加改进,然后继续使用。

现在有个问题:用户点击“添加标签”,弹出这个打标签控件。很自然,这个控件应该在点击位置附近,点击位置不同,弹出位置也应该跟着变化。

怎么样才能实现这种效果?

不能在c#代码里面设置这个弹出位置,比如将点击坐标传给后台代码,然后在后台代码里设置CSS,不起效果的。

只能依靠JS了。但是这个JS该怎么触发呢?象jquery,有回调函数。但ASP.NET的AJAX,有这个东西吗?

有的。


【用户控件页面代码 】

  1. <div id="pt_divPasteTag" style="position:absolute;width:400px;">
  2. <div class="pt_t" style="width:100px;">打标签</div>
  3. </div>
  4. <div>
  5. <script type="text/javascript" language="javascript">
  6. var _pt_x = 0;
  7. var _pt_y = 0;
  8. function pt_ShowBox(btn) {//此函数供调用页面激发按钮调用
  9. triger = $("#" + btn.id);
  10. _pt_x = triger.position().left;
  11. _pt_y = triger.position().top;
  12. $("#" + pt_pastebtn).click();
  13. }
  14. function pt_OffsetBox() {//此函数供调用页面委托程序使用
  15. var box = $("#pt_divPasteTag");
  16. box.css("left",_pt_x);
  17. box.css("top",_pt_y);
  18. }
  19. </script>
  20. </div>


【用户控件后台代码】
  1. public delegate void ClickEventHandler(object sender, EventArgs e);
  2. public event ClickEventHandler ShowClick;
  3. protected void btnPaste_Click(object sender, EventArgs e)
  4. {
  5. if (ShowClick != null)
  6. {//执行受委托的方法
  7. ShowClick(this, e);
  8. }
  9. this.Show();
  10. }


【调用页面的页面代码】

  1. <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="True" EnableViewState="false">
  2. </asp:ScriptManager>
  3. <div>
  4. <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
  5. <Triggers>
  6. </Triggers>
  7. <ContentTemplate>
  8. <div>
  9. <div id="divPaste" οnclick="pt_ShowBox(this)"><a id="lnkPaste" href="javascript:;">添加</a></div>
  10. </div>
  11. <uc1:PasteTag ID="PasteTag1" runat="server" OnShowClick="PasteTag1_ShowClick"/>
  12. </ContentTemplate>
  13. </asp:UpdatePanel>
  14. </div>

【调用页面的后台代码】

    

  1. protected void PasteTag1_ShowClick(object sender, EventArgs e)
  2. {
  3. ScriptManager.RegisterStartupScript(
  4. this.UpdatePanel1
  5. , this.GetType()
  6. , "pt_OffsetBox"
  7. , "pt_OffsetBox()"
  8. , true);
  9. }


最为关键的地方,就是【调用页面的后台代码】里,

  1. ScriptManager.RegisterStartupScript(
  2. this.UpdatePanel1
  3. , this.GetType()
  4. , "pt_OffsetBox"
  5. , "pt_OffsetBox()"
  6. , true);

使得打标签控件弹出以后,随之调用JS函数 pt_OffsetBox,对位置进行修正。



相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载