【问题标题】:Calling a confirm dialog box on code behind and get the chosen option在后面的代码上调用确认对话框并获取所选选项
【发布时间】:2012-11-22 19:57:29
【问题描述】:

我正在开发一个 asp.net 应用程序,我需要在后面的代码上调用一个确认对话框。之后,我需要获得用户的点击(如果他点击了确定或取消)。

如果他点击对话框的确定​​按钮,我必须继续运行我在调用对话框之前停止的代码。

为了解决这个问题,我想在 aspx 中放置一个按钮类型的输入,并将其样式设置为可见性:隐藏。因此,当用户单击“确定”按钮时,程序将调用此隐藏按钮,该按钮调用的方法将继续停止工作。

我会发布我的代码,我希望它可能会有所帮助。

下面的代码在我的代码后面,它调用了确认对话框。

System.Web.UI.
    ScriptManager.RegisterClientScriptBlock(this, GetType(), "__Mensagem", "if (confirm('" + CustomMessage + "')){document.getElementById(\'<%=btnSave.ClientID%>\').click();}", true); 

下面的代码在我的 aspx 上,它是“隐藏”按钮。

<input style="visibility:hidden;" id="btnSave" runat="server" onclick="btnSave_Click"/>

我不知道为什么不起作用。单击确认对话框的按钮 OK 后收到的错误如下: Erro em tempo de execução do Microsoft JScript: 'document.getElementByID(...)' é nulo ou não é um objeto

我来自巴西,所以错误是葡萄牙语,翻译成英文是这样的:

“Microsoft JScript 'document.getElementByID(...)' 发生运行时错误为 null 或不是对象”

我查看了页面的 html 代码,发现按钮不存在。

可能是因为我使用的是UpdatePanel,但是当我删除它(只是为了测试,我必须使用Update Panel)时,显示了同样的错误,此时按钮位于页面的html代码上。

【问题讨论】:

    标签: c# javascript asp.net


    【解决方案1】:

    在黑暗中刺伤。

    您是否在您的代码隐藏中设置了btnSave.visible = false;?如果是这样,这将阻止按钮被呈现到HTML

    另外,您是否有任何理由不使用 ASP:Button 控件,而不是 HTML 与 runat="server" 的混合?

    最后,在您的&lt;input.... 上添加type='button' 可能会有所帮助

    更新

    问题是您正在尝试应用内联标记 document.getElementById(\'&lt;%=btnSave.ClientID%&gt;\')

    在您的代码中 &lt;%=btnSave.ClientID%&gt; 尚不存在。

    当您将按钮放入另一个服务器控件时,您的代码将中断,因为 clientId 会变得不同。

    把代码改成这样:

         document.getElementById('" + btnSave.ClientID + "')
    

    无论您在哪里使用按钮,它都会起作用。

    【讨论】:

    • 嗨达伦,感谢您的回答。我检查了很多次,没有一行我在后面的代码中引用这个按钮。在尝试输入之前,我尝试使用 asp:Button,两者都不起作用并返回相同的错误。当我在这里复制并粘贴它时,我忘记将属性 type="button" 放在我的标签上,我在几分钟前将其删除以尝试 type="submit",这也不起作用。我正在尝试其他镜头,如果我解决了问题,我会在这里发布。再次感谢。
    • 我能否澄清一下,您说查看源代码时不会呈现此按钮?
    • 嗨,我解决了这个问题。我感谢您的帮助。我会发布解决方案
    • 查看更新 - 我发现了问题,也表明您将来会遇到问题..
    【解决方案2】:

    在浏览器中呈现您的页面后,右键单击它,然后说“查看源代码”。检查 HTML 并尝试找到隐藏的按钮,如果找到,请在语句 getElementById(\'&lt;%=btnSave.ClientID%&gt;\') 中使用它的 id。如果你没有找到你的按钮,那么可能你已经从你的代码隐藏的某个地方将它的可见性设置为 false,删除它,再次按照上面的过程,你应该没问题。

    【讨论】:

    • 嗨帕蒂尔,我解决了这个问题。无论如何,谢谢你的帮助。我会发布解决方案
    【解决方案3】:

    我解决了更换零件的问题

    document.getElementById(\'<%=btnSave.ClientID%>\').click();
    

    $(\"#ctl00_body_btnSave\").click();
    

    我还将输入元素替换为 asp:Button。

    现在看看我的代码在我的代码后面是怎样的:

    System.Web.UI.
        ScriptManager.RegisterClientScriptBlock(this, GetType(), "__Mensagem", "if (confirm('" + CustomMessage+ "')){$(\"#" + btnSave.ClientID + "\").click();}", true);
    

    在我的 aspx 上:

    <asp:Button id="btnSave" Width="0px" Text="" runat="server" onclick="btnSave_Click"/>
    

    不推荐使用 Widht="0px" 和 Text="" 来隐藏按钮,但我使用它是因为它不会给我带来问题。建议使用 CssClass 使其隐藏。

    所以,如果用户确认操作,甚至会调用btnSave_Click。

    感谢大家的回答。

    【讨论】:

    • 当您将按钮移动到另一个控件(例如占位符)时,您会遇到同样的问题,因为 ClientID 会变得不同。我刚刚提出了实际的解决方案,请参阅我的更新答案
    • 你是对的。我更新了上面的解决方案。仍在工作,现在如果将按钮移到另一个控件内部会更安全。感谢您的建议。
    • 你可以使用ClientIDMode="Static"(见documentation)。
    • @nrodic - 取决于 .net 版本
    • @nrodic,不幸的是这是一种“古老”的系统,它的框架版本是3.5,所以我不能使用静态clientId
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    相关资源
    最近更新 更多