2009-05-22 82 views
0

我已经在一个问题上工作了几个小时了。 我想创建动态的Javascripts,当我需要的时候加载到页面中。 这是一个基于Ajax技术的项目。首先,我尝试通过PageMethods来完成它,但由于视图状态和其他事情的缘故,PageMethods只能是静态的。问题在于我无法针对页面对象或任何其他控件进行编程,因为该方法是静态的。停止页面进程

我的下一个想法是,我有一个更新面板,在这个面板中我有一个隐藏的字段,我存储我的脚本。我触发hiddenfield通过javascript做回传。 在Page_Init我检查它是否是一个异步回发,如果它是造成它的隐藏字段。如果是这样,我注册我的新脚本。

现在来解决问题。发生这种情况时,我不想在页面生命周期中继续前进。我做完。我不希望Page_Load运行和Pre_Render等。我该如何实现这一目标? Response.End()会停止页面的进程,但显然我的脚本没有注册。

好吧我可以检查每种方法,如果它是一个asynchrounos回发,如果它是导致它的隐藏字段,但我想建立这个基础页面类,所有页面将继承。我希望它尽可能通用。

任何想法?如果有人能帮助我,我将不胜感激。谢谢。 /约翰

回答

1

你不想运行的方法是事件处理程序。只要你没有结束回应,那些事件就会发生。这是aspx页面如何工作的基本部分,它触发了事件。

如果在事件处理程序代码,您不想运行,那么您可以:

在page_init -set一个标志,然后检查该标志在你的事件处理程序 - 尝试解除你的页面事件(这是一个糟糕的主意,并会打破进一步的回传)

我怀疑你真的想要做什么是创建一个自定义处理程序,返回你的JavaScript和从你的加载JavaScript调用。

所以你有一个叫做MyJavascriptGenerator.ashx的处理程序,你有隐藏的javascript调用该页面而不是回发到相同的aspx页面。

没有关于页面预期行为的更多细节,这就是我能想到的。

0

ASPXpage:

function Generate() { 
     __doPostBack('hdJS', 'function SayHello(){alert(\'Hello to you\')}'); 
    } 

    function Execute() { 
     SayHello(); 
    } 

</script> 



代码隐藏:

使用系统; using System.Collections.Generic;使用System.Linq的 ; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls;

命名空间Web应用程序 { 公共部分类_Default:System.Web.UI.Page { 保护无效Page_Init(对象发件人,EventArgs的) { 如果(ScriptManager1.IsInAsyncPostBack) { 如果(请求[ “__EVENTTARGET”] ==“hdJS”) ScriptManager.RegisterClientScriptBlock(hdJS,hdJS.GetType(),“key”,Request [“__ EVENTARGUMENT”],true); } }

protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
} 

}

那是一个代码示例。你会如何将它转换成一个漫步者。 正如我所能想到的,我需要以某种方式回发相同的页面以在页面中注入JavaScript,对吧? 页面已经加载,我不想重新加载它。这是主要目标。好吧,我可以像更新面板一样使用局部页面渲染器重新加载它,但这意味着整个页面生命周期会再次执行,并且只有面板内的部分会更新,但仍会对所有控件进行初始化,并重新处理所有代码。我想避免这种情况。 如何用HttpHandler实现这一点? /约翰

+0

查找:^,替换4倍空间,检查正则表达式 - >会给你正确的代码格式 – 2009-05-23 11:50:42