ASP.NET有条件的是/否消息框

时间:2019-02-27 10:15:05

标签: asp.net web code-behind

我有一个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,以便我可以选择是否实际显示按钮,然后还可以知道用户是否单击了“是”或“不是”(最好是)而不进行回发?

1 个答案:

答案 0 :(得分:0)

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

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

我肯定使用Ajax或jQuery会有很好的解决方案,但这是一个相当简单的函数,开发不需要花费太长时间,因此这超出了范围。

相反,我将提供一个解决方案,在该解决方案中,我知道用户在单击按钮之前将对问题做出什么反应。 (尽管默默地喃喃地说:“现在是2019年,没有一种好的方法可以从.Net Web项目中的代码后面触发是/否对话框。”。我需要回到不使用Web的方式。)