Microsoft Bot Framework WebChat(DirectLine)在AJAX页面上导致回发

时间:2018-02-14 01:53:28

标签: c# asp.net botframework

我按照此处详述的步骤进行操作:https://github.com/Microsoft/BotFramework-WebChat以实现Microsoft Bot Framework(在C#SDK中)。我在一个独立的页面上测试过,它工作正常。我需要使用DirectLine版本,因为我必须将值从网页传递到机器人(用于用户初始化)。

但是,我必须实现它的页面是ASP.NET WebForms(使用ScriptManager和AJAXToolkit)。

使用机器人时出现问题。通过在聊天窗口中键入任何内容并按Enter键,整个页面将刷新,并且机器人将重新启动以启动。这使得机器人无法使用。

我猜测聊天控件的“发送”按钮以某种方式通过ScriptManager触发回发,导致整个页面刷新。我必须在按钮的click事件中包含e.preventDefault(),该按钮显示聊天窗口以处理这种情况。在Directline聊天控件中,我迷失了。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

  

使用机器人时出现问题。通过在聊天窗口中键入任何内容并按Enter键,整个页面将刷新,并且机器人将重新启动以启动。这使机器人无法使用。

当我在webform页面(.aspx)中嵌入我的机器人时遇到同样的问题,为了解决这个问题,我将聊天机器人容器<div id="mybot" />放在 UpdatePanel 控件中并设置 ChildrenAsTriggers 属性为 false ,这对我有用,你可以尝试一下。

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <link href="https://cdn.botframework.com/botframework-webchat/latest/botchat.css" rel="stylesheet" />
    <script src="https://cdn.botframework.com/botframework-webchat/latest/botchat.js"></script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
        <div>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
                <ContentTemplate>
                    <div id="mybot" />
                </ContentTemplate>
            </asp:UpdatePanel>
        </div>
    </form>
</body>
</html>
<script>
    BotChat.App({
        directLine: { secret: 'directline_secret_here' },
        user: { id: '1234', firstname: 'firstname_here', lastname: 'lastname_here' },
        bot: { id: 'fehantestbot' },
        resize: 'detect'
    }, document.getElementById("mybot"))
</script>

我测试的屏幕截图:

enter image description here

答案 1 :(得分:0)

使用此代码阻止从direclineJS网络聊天发送聊天时页面刷新:

$(document).keypress(function (e) {
    if (e.keyCode === 13) {
        e.preventDefault();
        return false;
    }
});