【发布时间】: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