asp.net - ASP.NET 条件是/否消息框
问题描述
我有一个 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 以便我可以选择是否实际显示按钮,然后还知道用户是否单击是或否,(最好)不做回传?
解决方案
我一直在思考和测试两种不同的解决方案:
- 在后面的代码中使用 ScriptManager.RegisterStartupScript 在 ASPX 页面上触发 JavaScript 确认函数。JavaScript 函数将根据用户是否回答是或否在隐藏控件中设置一个值,然后我的代码背后的东西将检查该隐藏字段的值并据此采取行动。问题在于一旦 ScriptManager.RegisterStartupScript 触发,它不会等待 JavaScript 函数“完成”,即等待用户回复 Confirm()。因此隐藏控件中的值将始终为空,因为在用户有机会响应 confirm() 之前,后面的代码会检查该控件。所以这是不行的。
- 在后面的代码中使用 ScriptManager.RegisterStartupScript 打开一个新的 ASPX 页面,该页面询问用户问题,然后在该页面中响应用户的回答执行所有工作。那么问题是传递新的 ASPX 页面需要处理的对象以响应用户的响应。
我确信使用 Ajax 或 jQuery 有很好的解决方案,但这是一个相当简单的功能,不应该花费太长时间来开发,所以这超出了这个范围。
相反,我将采用一种解决方案,在该解决方案中,我知道用户在单击按钮之前会回答什么问题。(虽然我低声喃喃自语:“现在是 2019 年,没有好的方法可以从 .Net Web 项目后面的代码中启动一个是/否对话框......”。我需要回到不使用 Web 的状态)。
推荐阅读
- c# - 错误消息“没有为此对象定义无参数构造函数”
- javascript - 离子离子日期时间:如何设置默认选择器值
- python - 读取数据集并使用 Pandas 对一些信息进行分组
- php - 在 phpunit.xml 中使用 conn:sqlite value::memory: 而不是 conn:mysql db:testing 时,一些测试开始失败?
- java - 如何将两个 SeekBar 的两个值相加并在文本视图中打印?
- ios - 无法单击选项卡栏控制器中的更多选项列表
- django-templates - 如何覆盖 django allauth 电子邮件模板
- github - 有没有办法将网站中使用的资产提交到 GitHub?
- c# - WPF 建议文本框
- javascript - 如何在添加标题时使用 javascript fetch api 上传文件