ASP.NET条件是/否消息框

问题描述 投票:0回答:1

我有一个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,这样我就可以选择是否实际显示按钮,然后还知道用户是否单击是或否,(最好)不做回发?

asp.net web code-behind
1个回答
0
投票

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

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

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

相反,我将使用一个解决方案,我知道用户在点击按钮之前会对问题做出什么反应。 (虽然默默地低声嘀咕道:“这是2019年,没有好办法从.Net网络项目中的代码中启动是/否对话框......”。我需要回到不使用网络)。

© www.soinside.com 2019 - 2024. All rights reserved.