ASP.NET 条件 yes/no 消息框
ASP.NET conditional yes/no messagebox
我有一个 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 代码的 "the middle" 中使用 ScriptManager.RegisterStartupScript 以便我可以选择是否实际显示按钮,然后还知道用户是否单击了是或者不,(最好)不做回发?
我一直在思考和测试两种不同的解决方案:
- 在隐藏代码中使用 ScriptManager.RegisterStartupScript 在 ASPX 页面上触发 JavaScript 确认功能。 JavaScript 函数将根据用户回答是或否在隐藏控件中设置一个值,然后我的代码将检查该隐藏字段的值并据此采取行动。问题在于,一旦 ScriptManager.RegisterStartupScript 触发,它不会等待 JavaScript 函数变为 "finish",即等待用户回复 confirm()。因此隐藏控件中的值将始终为空,因为在用户有机会响应 confirm() 之前,后面的代码会检查该控件。所以这是不行的。
- 在代码隐藏中使用 ScriptManager.RegisterStartupScript 打开一个新的 ASPX 页面,向用户询问问题,然后在该页面中完成所有响应用户回答的工作。接下来的问题是传递新的 ASPX 页面需要处理的对象以响应用户的响应。
我确信使用 Ajax 或 jQuery 有很好的解决方案,但这是一个相当简单的函数,开发时间不会太长,所以有点超出范围为此。
相反,我将采用一种解决方案,在该解决方案中,我知道用户在单击按钮之前会对问题做出什么反应。 (虽然我小声嘀咕着:"It's 2019 and there's no good way to fire up a yes/no dialog from code behind in a .Net web project..."。我需要回到不使用网络的状态)。
我有一个 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 代码的 "the middle" 中使用 ScriptManager.RegisterStartupScript 以便我可以选择是否实际显示按钮,然后还知道用户是否单击了是或者不,(最好)不做回发?
我一直在思考和测试两种不同的解决方案:
- 在隐藏代码中使用 ScriptManager.RegisterStartupScript 在 ASPX 页面上触发 JavaScript 确认功能。 JavaScript 函数将根据用户回答是或否在隐藏控件中设置一个值,然后我的代码将检查该隐藏字段的值并据此采取行动。问题在于,一旦 ScriptManager.RegisterStartupScript 触发,它不会等待 JavaScript 函数变为 "finish",即等待用户回复 confirm()。因此隐藏控件中的值将始终为空,因为在用户有机会响应 confirm() 之前,后面的代码会检查该控件。所以这是不行的。
- 在代码隐藏中使用 ScriptManager.RegisterStartupScript 打开一个新的 ASPX 页面,向用户询问问题,然后在该页面中完成所有响应用户回答的工作。接下来的问题是传递新的 ASPX 页面需要处理的对象以响应用户的响应。
我确信使用 Ajax 或 jQuery 有很好的解决方案,但这是一个相当简单的函数,开发时间不会太长,所以有点超出范围为此。
相反,我将采用一种解决方案,在该解决方案中,我知道用户在单击按钮之前会对问题做出什么反应。 (虽然我小声嘀咕着:"It's 2019 and there's no good way to fire up a yes/no dialog from code behind in a .Net web project..."。我需要回到不使用网络的状态)。