【问题标题】:How to run javascript in backend?如何在后端运行javascript?
【发布时间】:2021-12-10 21:27:28
【问题描述】:

我想运行这个确认脚本,但它不适用于 HTML 和 asp.net 按钮。它仅显示“您单击了取消”。有人可以帮我吗?这是我的代码。

<asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div>
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
         <button id="btnperfdel" runat=server type="button" class="btn btn-outline-secondary" onclientclick="confirm()"><i class="mdi mdi-delete">Delete</i> </button>                                   
         <asp:Button ID="Button1" runat="server" Text="Button" onclientclick="confirm()"/>                    
       </div>

<script type = "text/javascript">
    function confirm() {
        var confirm_value = document.createElement("INPUT");
        confirm_value.type = "hidden";
        confirm_value.name = "confirm_value";
        if (confirm("Confirm Delete?")) {
            confirm_value.value = "Yes";
        } else {
            confirm_value.value = "No";
        }
        document.forms[0].appendChild(confirm_value);
    }
    </script>
Here's my backend 

Protected Sub btnperfdel_Click(ByVal sender As Object, ByVal e As System.EventArgs) 处理 btnperfdel.ServerClick

    Dim confirmValue As String = ""

    confirmValue = Request.Form("confirm_value")

    If confirmValue = "Yes" Then

        Label1.Visible = False

    Else
        ClientScript.RegisterStartupScript(Me.GetType(), "alert", "alert('You clicked Cancel')", True)
    End If

End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim confirmValue As String = ""
    confirmValue = Request.Form("confirm_value")

    If confirmValue = "Yes" Then

        Label1.Visible = False

    Else
        ClientScript.RegisterStartupScript(Me.GetType(), "alert", "alert('You clicked Cancel')", True)
    End If
End Sub    

【问题讨论】:

  • How do I ask a good question? -> “描述问题。“它不起作用”不足以帮助人们理解你的问题。相反,告诉其他读者预期的行为应该是什么是。告诉其他读者错误消息的确切措辞是什么,以及产生它的代码行。”
  • 您的第二行是剪切 + 粘贴错误,还是缺少引号:== button id="btnperfdel" runat=server ----- "server" 周围没有引号

标签: javascript html asp.net


【解决方案1】:

你使用与内置js函数名称相同的函数名称确认?

这是一个“非常”的坏主意。

尝试为您的 js 函数名称指定一个与内置函数不同的名称。

这样说:

     <asp:Button ID="Button1" runat="server" Text="Button" onclientclick="myconfirm()"/>                    

    <script type = "text/javascript">
        function myconfirm() {
            var confirm_value = document.createElement("INPUT");
            confirm_value.type = "hidden";
            confirm_value.name = "confirm_value";
            if (confirm("Confirm Delete?")) {
                confirm_value.value = "Yes";
            } else {
                confirm_value.value = "No";
            }
            document.forms[0].appendChild(confirm_value);
        }
    </script>

所以,对于函数名称来说,这看起来是一个非常糟糕的名称。

另外,请注意,您可以“返回”真/假到按钮单击。我认为在 99% 的情况下,用户单击取消,然后您不希望代码运行,并且不需要进一步的操作。所以你实际上可以这样做:

     <asp:Button ID="Button1" runat="server" Text="Button" onclientclick="return myconfirm2()"/>                    

    <script type = "text/javascript">
        function myconfirm2() {

            return confirm("Confirm Delete?");
        }

如果您执行上述操作,则如果用户单击取消,则按钮单击不会运行。

事实上,您甚至可以转储所有代码,然后这样做:

     <asp:Button ID="Button1" runat="server" Text="Button" 
     onclientclick="return confirm('confirm delete');"/>  

因此,如果您为客户端单击事件返回 true 或 false,则服务器端代码按钮将不会运行。在 10 种情况下的 9 种情况下,您不需要知道用户是否点击取消,但只要我们不运行按钮代码服务器端即可。

不管怎样,更改你的确认名称,因为这是一个内置的 js 函数名称,使用相同的名称非常混乱。

编辑:======================================== =============

我建议你尝试/使用这个:

     <asp:Button ID="Button1" runat="server" Text="Button" onclientclick="myconfirm()"/>                    
     <asp:HiddenField ID="myanswer" runat="server" ClientIDMode="Static" />

    <script type = "text/javascript">
        function myconfirm() {

            var myanswer = document.getElementById("myanswer")

            if (confirm("Confirm Delete?")) {
                myanswer.value = "Yes"
            }
            else {
                myanswer.value = "No"
            }
        }

    </script>

后面的代码是:

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    If myanswer.Value = "Yes" Then
        ' do whatever here for yes
        Debug.Print("yes")
    Else
        ' do whtever here for no
        Debug.Print("no")
    End If

End Sub

【讨论】:

  • 先生,我还是个 JavaScript 新手。使用 myconfirm2,我得到了 yes no 提示,但是如何在后端使用该 promt 的返回值?
  • 在您的情况下,我们总是希望为单击事件返回 true,但是您根据您在 js 代码中的示例设置的值将会并且可以在服务器端获取。因此,您的原始示例代码确实可以 100% 正常工作 - 只需更改函数的名称(比如 myconfirm),您发布的代码实际上可以正常工作(它应该 - 并且对我有用)。因此,您的代码片段对我来说确实可以正常工作-正如所指出的,将 js 函数的名称更改为 myconfirm,并在 onclient 单击事件中使用 myconfirm,您所拥有的就可以了。因此,您只需要更改函数名称
  • 查看我的新编辑和新示例。我建议你试试这个新的示例代码。但是,你所拥有的一切都很好——只是这个函数的一个坏名字。试一试新的示例代码示例 - 看看它是如何为您工作的。
  • 非常感谢先生,您解释得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
  • 2020-06-06
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多