首页 > 解决方案 > 为什么我的 JavaScript 代码在我的 ASP.NET Web 表单页面上不起作用?

问题描述

我在我的网页表单页面中遇到了表单提交问题。我有一个功能,应该在通过选择 OK 确认后,执行 adocument.forms.submit并将用户发送到另一个页面。

尝试在 Chrome 中调试时,我没有收到任何 JavaScript 错误,并且在尝试单步执行 C# 函数时我根本没有收到异常。在 JavaScript 输入提交表单方面有更多经验的人可以协助解决这个问题,或者用给定的代码向我展示一个更好的方法吗?

protected virtual void WriteCancelDiv(string claim_id, string promotion_id)
{
    string innerHtml = "<form action=\"TestPath/claim_cancel.aspx\" method=post><input type='hidden' name='claim_id' value='" + claim_id + "'><input type='hidden' name='promotion_id' value='" + promotion_id + "'>";
    innerHtml += @"<script> 
                   debugger;
                   function Clicked(){
                       var b = confirm(""This cannot be undone.  Are you sure you want to cancel?"");
                       if (!b) {return;}
                       else {document.forms[0].submit();}
                   }
                   </script>
                   <input class=""btn btn-sm btn-primary"" type=""submit"" value=""Cancel Claim"" onClick=""Clicked();"">
                </form>";
    cancel_div.InnerHtml = innerHtml;
}

标签: javascriptwebforms

解决方案


将客户端逻辑混合到 ASP.NET Web 表单中可能是一件相当艰巨的事情。在您的代码中,您将 HTML(包括表单元素)注入到 div 中。这样做的问题是,每个 ASP.NET Web 控件(包括您的 div)都已经在一个巨大的包装表单元素中,以确保这些控件的回发。

ASP.NET Web 表单在客户端呈现为简单的 HTML,这就是它的工作原理。你所看到的每件事物周围总是有一个巨大的表单元素。不幸的是,将一个表单元素添加到另一个表单元素不是有效的 HTML。所以你的方法是行不通的。

我不会在这里提供任何代码,但会给你一个关于我将如何解决这个问题的描述。

如果我没记错的话,这就是您要实现的目标:

单击按钮 A时,会出现另一个按钮 B。首先单击该按钮 B会出现一个确认对话框,询问用户他/她是否真的想要执行该任务。如果是这样,用户将被重定向到另一个页面。

我会这样做:

  1. 您将按钮 B添加为另一个隐藏可见性的服务器端控件。
  2. 按钮 A的单击事件处理程序中,您将按钮 B的可见性设置为可见。
  3. 您可以将确认对话框添加到按钮 B的onClientClick属性。
  4. 按钮 B的单击事件处理程序中,您重定向到所需的页面。

推荐阅读