使用回发在ASP.NET WebForms中调用手动AJAX函数

时间:2013-05-26 02:22:52

标签: asp.net ajax webforms postback xmlhttprequest

我正在开发类似于系统控制台的东西,但它使用简单的HTML页面呈现。

以下是代码:

代码处于测试状态,我不想提及代码风格等......我知道这个问题。

我对我的WebForms项目的AJAX调用感到困惑。那么让我来描述一下,我正在尝试做什么:

  • 首先,当用户将文字输入Enter时,我正在捕捉关键事件<textarea>

  • 然后我正在阅读文本,用户已添加并通过XmlHttp对象将其发送到此页面(回发操作,因为我发送 POST HTTP查询到同一网页)

  • 在第三个操作中,我通过使用 CheckGetData()/ GetDirectories()方法设置响应,最终分析字符串数据并在consoleOutput中呈现响应代码隐藏。

但是,最后什么都没发生......对我来说最奇怪的事情是:

  • 如果要在XmlHttp在调试时发送 GET 查询时查看IsPostBack值,那么它将是false,为什么?正如回发的定义一样,它是对同一网页的这种类型的递归HTTP查询(从网页到自身进行 POST 查询)
  • 我注意到通过调试器查看值会发生变化。调试器描述的值是通过扩展Visual Studio中的小菜单来编辑的,但是如果要从Visual Studio中的嵌入式内部IIS服务器切换到网页 - 不会有任何更改,为什么?

所以,最后一个问题是:为什么要调用bug以及如何修复它?

1 个答案:

答案 0 :(得分:1)

不是直接的答案,只是建议你如何实现。

使用UpdatePanel。这是你如何实现(最低限度;有点hacky):

<强>脚本:

<script>
    function keyPressed(e) {
        var code;
        if (window.event) {
            //IE
            code = e.keyCode;
        }
        else {
            //other browsers
            code = e.which;
        }
        //check, for example, if the Enter key was pressed (code 13)
        if (code == 13) {
            //Enter key pressed
            document.getElementById("<%= btnPostback.ClientID %>").click();
        }
        else {
            //Another key pressed
        }
    }
</script>

aspx标记:
    

<textarea id="consoleBody" rows="30" cols="30" runat="server" onkeypress="javascript:keyPressed(event);" />

<asp:UpdatePanel runat="server" UpdateMode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnPostback" EventName="Click" />
    </Triggers>
    <ContentTemplate>
        <label id="consoleOutput" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>

<asp:Button Text="Enter" Style="display: none;" runat="server" ID="btnPostback" OnClick="HandleCommand" />

<强>代码隐藏:

protected void HandleCommand(object sender, EventArgs e)
{
    SetPageData();
    CheckGetData(); 
}