WEB开发网
开发学院网页设计JavaScript 编写组件,使用JavaScript更新UpdatePanel 阅读

编写组件,使用JavaScript更新UpdatePanel

 2010-09-14 13:31:00 来源:WEB开发网   
核心提示: 我们在页面的Page_InitComplete事件中判断Enabled属性是否为true(这时Enabled属性已经不能修改了),如果Enabled为ture,编写组件,使用JavaScript更新UpdatePanel(5),则响应页面的Load事件,用于动态添加一个LinkButton

我们在页面的Page_InitComplete事件中判断Enabled属性是否为true(这时Enabled属性已经不能修改了),如果Enabled为ture,则响应页面的Load事件,用于动态添加一个LinkButton。请注意,我们并不会将它的Visible属性设为False,否则它的HTML将不会出现在页面上。我们应该将它Style的display设为none,这样它既能在页面结构中出现,也不会显示出来。在添加了这个LinkButton之后,将会保留它的ClientID,并且找出当前页面的ScriptManager,调用RegisterAsyncPostBackControl方法,将这个LinkButton注册为异步刷新页面的控件。

以前,我写给别人范例都是使用了一个Button作为Trigger,然后在客户端使用JavaScript对它进行点击。这其实不是很合理,比较好的做法其实使用LinkButton。要说明这个问题的原因,我们需要看一下LinkButton在页面中生成的HTML元素。很显然,这是个<a />,如下:

LinkButton生成的HTML

<a id="UpdaterButton" href="javascript:__doPostBack('UpdaterButton','')">Update</a>

请注意它的href,它表明了点击该元素会执行这个JavaScript代码。发现了不?我们何必模拟元素的点击,我们直接调用__doPostBack函数不就行了?Cool!于是我们现在也可以轻易得出,在响应页面的PreRenderComplete事件时需要注册的Script脚本了。如下:

在PreRenderComplete事件中注册脚本

private const string BasicScripts =
@"if (!window.UpdatePanels) window.UpdatePanels = {};
UpdatePanels._createUpdateMethod = function(btnId)
{
  return function()
  {
    __doPostBack(btnId, '');
  }
}";
private const string RegisterMethodTemplate =
  "nUpdatePanels['{0}'] = UpdatePanels._createUpdateMethod('{1}');";
private void Page_PreRenderComplete(object sender, EventArgs e)
{
  this.Page.ClientScript.RegisterClientScriptBlock(
    this.GetType(),
    "BasicScripts",
    JavaScriptUpdater.BasicScripts,
    true);
  this.Page.ClientScript.RegisterClientScriptBlock(
    this.GetType(),
    this.clientButtonId,
    String.Format(JavaScriptUpdater.RegisterMethodTemplate,       this.MethodName, this.clientButtonId),
    true);
}

上一页  1 2 3 4 5 6 7  下一页

Tags:编写 组件 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接