【问题标题】:ASP.NET conditional yes/no messageboxASP.NET 条件是/否消息框
【发布时间】:2019-02-27 20:30:58
【问题描述】:

我有一个 asp:Button,它在 OnClick 事件上触发代码隐藏函数。在那个 OnClick 事件中发生了几件事,其中我检查了数据库是否需要询问用户一个是或否的问题。为此,我需要一个消息框。首先我是这样做的:

protected void MyButton_Onclick(object sender, EventArgs e)
{
    // lots of stuff happening
    bool iNeedToAskTheUser = INeedToAskTheUser(stuff);
    if (iNeedToAskTheUser) 
    {
        DialogResult result = MessageBox.Show("Do you want to fix all objects?", "Fix objects", MessageBoxButtons.YesNo);
        if (result == DialogResult.Yes) // do stuff
    }
    // some other stuff
}

这在本地工作得很好,但在部署时却不行,所以我想我需要改用 ScriptManager.RegisterStartupScript。我可以在 ASPX 页面上添加 javascript 来触发一个对话框并将响应保存在一个隐藏控件中,然后我可以查看它,但我不想触发对话框,除非我必须这样做,我之前检查过我在上面的代码中执行 DialogResult。所以当用户点击按钮时我不能立即这样做。

有什么办法可以在我的 _OnClick 代码的“中间”使用 ScriptManager.RegisterStartupScript 以便我可以选择是否实际显示按钮,然后还知道用户是否单击了是或否,(最好) 不做回发?

【问题讨论】:

  • "我可以在 ASPX 页面上添加 javascript,它会启动一个对话框并将响应保存在一个隐藏控件中,然后我可以查看它,但我不想启动对话框,除非我必须" ...所以要么 a) 如果不需要,则根本不添加脚本,或者 b) 将一些布尔值注入 JavaScript,然后用于控制它是否继续显示对话框。是的,据我所知,您可以在任何您喜欢的地方使用 registerstartupscript。这是一个示例:telerik.com/forums/firing-javascript-function-after-postback
  • 另一种方法是通过 AJAX 调用服务器端逻辑,然后当您将响应返回到您的页面时,使用 JavaScript 读取响应并决定是否运行一些显示对话框的脚本。这样您就不必将整个页面发布回服务器。
  • 您也可以调用 Javascript OnClientClick 并显示一个对话框(如果为真),您可以将其转发给后面的代码,否则您可以留在 OnClientSide 并使用您想要显示的任何内容显示对话框。
  • @ADyson 是的,我可以通过警报来做到这一点,但我需要一个是/否对话框(“确认”),我需要捕捉用户点击了哪个按钮,然后继续执行不同的我的部分代码取决于答案。所以我需要代码来等待用户在弹出对话框中选择一个按钮,我认为RegisterStartupScript通常不会这样做,但我可能错了。
  • @JawadAnwar 你能给我一个例子,说明我如何从我的代码中调用 JavaScript OnClientClick 函数来根据我的布尔 iNeedToAskTheUser 显示一个对话框,然后让用户回复并使用它我的 if 案例(“如果(iNeedToAskTheUser)”)?

标签: asp.net web code-behind


【解决方案1】:

我一直在思考和测试两种不同的解决方案:

  1. 在后面的代码中使用 ScriptManager.RegisterStartupScript 在 ASPX 页面上触发 JavaScript 确认函数。 JavaScript 函数将根据用户是否回答是或否在隐藏控件中设置一个值,然后我的代码背后的东西将检查该隐藏字段的值并据此采取行动。问题在于一旦 ScriptManager.RegisterStartupScript 触发,它不会等待 JavaScript 函数“完成”,即等待用户回复 Confirm()。因此隐藏控件中的值将始终为空,因为在用户有机会响应 confirm() 之前,后面的代码会检查该控件。所以这是不行的。
  2. 在后面的代码中使用 ScriptManager.RegisterStartupScript 打开一个新的 ASPX 页面,该页面询问用户问题,然后在该页面中响应用户的回答执行所有工作。那么问题是传递新的 ASPX 页面需要处理的对象以响应用户的响应。

我确信使用 Ajax 或 jQuery 有很好的解决方案,但这是一个相当简单的功能,不应该花费太长时间来开发,所以这有点超出了这个范围。

相反,我将采用一种解决方案,在该解决方案中,我知道用户在点击按钮之前会回答什么问题。 (虽然我低声喃喃自语:“现在是 2019 年,没有好的方法可以从 .Net Web 项目后面的代码中触发是/否对话框......”。我需要回到不使用 Web 的状态)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    相关资源
    最近更新 更多