【问题标题】:c# asp.net getting user confirmation from ok/cancel messagec# asp.net 从 ok/cancel 消息中获取用户确认
【发布时间】:2023-02-22 05:09:11
【问题描述】:

在我的 asp.net 页面中,我想确保用户已确认要采取的操作, 所以我在母版页中添加了一个脚本,其中包含一个名为 confirm() 的函数,该函数将值存储到隐藏的输入中,

问题: 当用户通过在消息上按 OK 或取消进行交互时,它实际上返回先前给定的值而不是当前值, 如果用户单击取消并且之前的操作正常,则消息返回 OK 而不是取消

在母版页中:

    <script type = "text/javascript">
        function Confirm(msg) {
            var form = document.forms[0];

            // Remove the previous element added
            var oldInput = document.getElementById('myInput');
            if (oldInput !== null) form.removeChild(oldInput);

            // Add a new element
            var confirm_value = document.createElement("myInput");
            confirm_value.setAttribute('id', 'myInput');
            confirm_value.type = "hidden";
            confirm_value.name = "confirm_value";

            if (confirm(msg)) {
                confirm_value.value = "Yes";
            } else {
                confirm_value.value = "No";
            }

            form.appendChild(confirm_value);
        }
    </script>

在需要用户操作的当前 page.aspx.cs 中,检查空字段并向用户显示消息后:

ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "confbkadd", "Confirm('" + "not all mandatory data where entered , click cancel to return or ok to end" + "');", true);

然后直接查看消息后的答案:


string confirmValue = Request.Form["confirm_value"];
if (confirmValue == "No")
{
confirmValue = "";
return;
}
else
{
confirmValue = "";
lblmessage.Text = "entered data where not saved";
}

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    好吧,我必须假设用户正在点击某个按钮,例如删除、订购或其他任何按钮。

    所以,一个平面简纽扣就有能力做到这一点。

    常规按钮有两个事件存根:

     One for the server side event
     One for the client side event
    

    而且,事实证明,如果客户端事件返回 false,则服务器端按钮单击事件不会运行。关于我们在这里需要的东西,这真是太完美了。

    所以,说这个超级简单的标记:

        <asp:Button ID="cmdStart" runat="server" Text="Start the reactor!"
            CssClass="btn"
            OnClick="cmdStart_Click"
            OnClientClick="return myprompt()"  
            />
    
    
        <script>
            function myprompt() {
                var bolOK = confirm("Really start the Reactor?")
                return bolOK
            }
    
        </script>
    

    所以,请注意按钮如何有 2 个事件。 (服务器和客户端)。

    如果客户端单击事件返回 false,则服务器按钮/代码不会运行。 (我们为 JavaScript 代码返回 false)。

    因此,上面看起来像这样:

    如果你点击确定,然后服务器按钮运行。

    所以,这里不需要一些隐藏的控件等。

    请记住,如果代替那些“非常丑陋”的内置浏览器对话框,您可能想要采用 say say sweet alert,甚至是 jQuery.UI 对话框。

    今天这样的对话框(和几乎所有的 JavaScript)代码不应该使用阻塞代码。允许这样做的浏览器中仅有的 2 个特性是 alter() 和 confirm()。并且在未来,由于阻止和冻结浏览器的能力,它们很可能会被删除。

    然而,一个可爱/酷的技巧可以用于这种异步对话。

    所以,假设我们想对 jQuery.UI 对话框做同样的事情。

    所以,现在,我们的按钮看起来像这样:

            <asp:Button ID="cmdDelete" runat="server" Text="Delete Record"  CssClass="btn"
                OnClick="cmdDelete_Click"  
                OnClientClick="return mydelprompt2(this)"
             />
    
    
            <div id="mydeldiv" style="display:none">
                <h2>Delete this record, are you sure Yes/no?</h2>
            </div>
    
            <script>
                mydelpromptok = false
                function mydelprompt2(btn) {
    
                    if (mydelpromptok) {
                        mydelpromptok = false
                        return true
                    }
    
                    var mydiv = $("#mydeldiv")
                    mydiv.dialog({
                        modal: true, appendTo: "form",
                        title: "delete", closeText: "",
                        width: "20%",
                        position: { my: 'left top', at: 'right bottom', of: btn },
                        buttons: {
                            Ok: (function () {
                                mydiv.dialog("close")
                                mydelpromptok = true
                                btn.click()
                            }),
                            Cancel: (function () {
                                mydiv.dialog("close")
                            })
                        }
    
                    });
                    return false;
                }
            </script>
    

    现在,我当然可以创建一个系统范围的弹出对话框。

    所以在上面,当你点击按钮时,客户端代码运行,弹出对话框然后返回 false!!!!

    当用户点击“确定”时,我们设置 mydelpromptok = true 然后再次单击相同按钮!!!

    现在单击按钮运行客户端,它现在返回 true,然后服务器端代码运行。

    这看起来像这样:

    jQuery.UI 必须添加到您的项目中,假设我们已经有了 jQuery。

    我非常喜欢 jQuery.UI 对话框,因为您可以将它们放在用户单击的位置。

    对话框部分要求您在页面中有一个“div”。

    所以,说这个标记:

        <asp:Button ID="cmdDelete" runat="server" Text="Delete Record"  CssClass="btn"
            OnClick="cmdDelete_Click"  
            OnClientClick="return mydelprompt2(this)" />
    
        <div id="mydeldiv" style="display:none">
            <img src="../Content/Rhotel.jpg" style="float:left" />
            <h4><i>Delete this Hotel, are you sure?</i></h4>
        </div>
    
        <script>
            mydelpromptok = false
            function mydelprompt2(btn) {
                if (mydelpromptok) {
                    mydelpromptok = false
                    return true
                }
    
                var mydiv = $("#mydeldiv")
                mydiv.dialog({
                    modal: true, appendTo: "form",
                    title: "Delete Hotel?", closeText: "",
                    width: "20%",
                    position: { my: 'left top', at: 'right bottom', of: btn },
                    dialogClass: "dialogWithDropShadow",
                    buttons: {
                        Ok: (function () {
                            mydiv.dialog("close")
                            mydelpromptok = true
                            btn.click()
                        }),
                        Cancel: (function () {
                            mydiv.dialog("close")
                        })
                    }
                });
                return false;
            }
        </script>
    

    现在的结果是这样的:

    所以,你不需要你在这里尝试的所有隐藏的东西。

    如果你赶时间,你甚至可以将客户端确认 RIGHT 放入按钮中,并且没有时间像上面的第二个例子那样进行一些花哨的对话。

    所以,你可以/可以这样做:

        <asp:Button ID="cmdStart" runat="server" Text="Start the reactor!"
            CssClass="btn"
            OnClick="cmdStart_Click"
            OnClientClick="return confirm('Really do this?')"  
            />
    

    因此,我们甚至不需要调用客户端 js 例程,我们只需将 js 表达式直接放入上面的按钮即可。

    【讨论】:

      猜你喜欢
      • 2016-05-30
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多