我正在开发类似于系统控制台的东西,但它使用简单的HTML页面呈现。
以下是代码:
代码处于测试状态,我不想提及代码风格等......我知道这个问题。
我对我的WebForms项目的AJAX调用感到困惑。那么让我来描述一下,我正在尝试做什么:
首先,当用户将文字输入Enter
时,我正在捕捉关键事件<textarea>
。
然后我正在阅读文本,用户已添加并通过XmlHttp
对象将其发送到此页面(回发操作,因为我发送 POST HTTP查询到同一网页)
在第三个操作中,我通过使用 CheckGetData()/ GetDirectories()方法设置响应,最终分析字符串数据并在consoleOutput
中呈现响应代码隐藏。
但是,最后什么都没发生......对我来说最奇怪的事情是:
IsPostBack
值,那么它将是false
,为什么?正如回发的定义一样,它是对同一网页的这种类型的递归HTTP查询(从网页到自身进行 POST 查询)所以,最后一个问题是:为什么要调用bug以及如何修复它?
答案 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();
}