0

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

以下是代码:

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

我对我的 WebForms 项目的 AJAX 调用有点困惑。所以让我来描述一下,我正在尝试做的事情:

  • 首先Enter,当用户完成将文本输入到<textarea>.

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

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

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

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

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

4

1 回答 1

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(); 
}
于 2013-05-26T03:50:35.293 回答