停止页面进程

时间:2009-05-22 17:17:30

标签: asp.net ajax

我已经解决了几个小时的问题了。 我想创建动态Javascripts,我需要时将其加载到页面中。 这是一个基于Ajax技术的项目。首先我试图通过PageMethods来做,但是由于viewstate和其他东西,PageMethods只能是静态的。问题是我无法针对页面对象或任何其他控件进行编程,因为该方法是静态的。

我的下一个想法是有一个更新面板,在这个面板中我有一个隐藏的字段,我存储我的脚本。我通过javascript触发hiddenfield进行回发。 在Page_Init中,我检查它是否是asynchrounos回发,以及是否是导致它的隐藏字段。如果是这样,我会注册我的新脚本。

现在问题。当发生这种情况时,我不希望在页面生命周期中走得更远。我做完。我不希望Page_Load运行和Pre_Render等。我怎么能实现这个? Response.End()停止页面的进程,但显然我的脚本没有注册。

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

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

2 个答案:

答案 0 :(得分:1)

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

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

- 在page_init中设置一个标志,然后在事件处理程序中检查该标志 - 解开你的页面事件(这是一个坏主意,并会打破进一步的回发)

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

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

如果没有关于页面预期行为的更多详细信息,那就是我能想到的。

答案 1 :(得分:0)

ASPXpage:

         

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

    function Execute() {
        SayHello();
    }

</script>

                                                           
        
                                                                                         

代码隐藏:

使用System; 使用System.Collections.Generic; 使用System.Linq; 使用System.Web; 使用System.Web.UI; 使用System.Web.UI.WebControls; 使用System.Web.UI.HtmlControls;

命名空间WebApp {     public partial class _Default:System.Web.UI.Page     {         protected void Page_Init(object sender,EventArgs e)         {             if(ScriptManager1.IsInAsyncPostBack)             {                 if(Request [“__ EVENTTARGET”] ==“hdJS”)                     ScriptManager.RegisterClientScriptBlock(hdJS,hdJS.GetType(),“key”,Request [“__ EVENTARGUMENT”],true);             }         }

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

}

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