C# 使用Page.ClientScript.RegisterClientScriptBlock无法工作
我正试图启动一个弹出窗口,如下所示,但它不起作用。请帮忙C# 使用Page.ClientScript.RegisterClientScriptBlock无法工作,c#,asp.net,C#,Asp.net,我正试图启动一个弹出窗口,如下所示,但它不起作用。请帮忙 public void btnSubmit_Click(Object o, EventArgs e) { if (checkFileExists(Convert.ToString(fileInfo))) { Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Msg", "<script type=\"text/javascript
public void btnSubmit_Click(Object o, EventArgs e)
{
if (checkFileExists(Convert.ToString(fileInfo)))
{
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Msg", "<script type=\"text/javascript\" language=\"javascript\">function showMsg(){return confirm(\"This image name already exists, do you want to replace it?\");}</script>", true);
btnSubmit.OnClientClick = "return showMsg()";
}
if (something else)
{
// It does whatever is here but never pops the question above
}
}
public void btnSubmit\u单击(对象o,事件参数e)
{
if(checkFileExists(Convert.ToString(fileInfo)))
{
Page.ClientScript.RegisterClientScriptBlock(this.GetType(),“Msg”,“function showMsg(){return confirm(\“此映像名称已存在,是否替换它?\”;}),true);
btnSubmit.OnClientClick=“return showMsg()”;
}
如果(其他事情)
{
//它在这里做任何事情,但从来没有弹出上面的问题
}
}
在我的按钮上
<asp:Button class="Button" ID="btnSubmit" CausesValidation="True" Text="SUBMIT" runat="server"
OnClick="btnSubmit_Click"></asp:Button>
您发送到RegisterClientScriptBlock
的最后一个参数是true
,它告诉方法将脚本包装到
块中,但您已经这样做了。它可能不起作用,因为它正在呈现无效的(即嵌套的)脚本标记。更新了响应(响应OP的评论)
在ASP.NET中实现整个“确定”范例可能有点烦人。这是我用来解决这个问题的方法。我相信还有很多其他的方法可以做到这一点,其中一些更优雅。但无论如何
- 在表单中放置一个asp:Hidden字段,以表示“用户确信”。将其默认值设置为false
- 直接在.ASPX文件中定义showMsg()javascript函数。它可以永远在页面上,随时准备开火;您不希望或不需要通过RegisterClient脚本有条件地添加它。如果用户确认“是,我确定”,您还需要增强该功能以执行两件事:a)将asp:Hidden字段的值设置为true;b) 提交表格
- 实现btnSubmit_Click()函数以检查asp:Hidden值:如果该值为true,则您知道用户已确认“确定”对话框,因此您可以执行操作(将隐藏值返回false以“重置”它)。如果asp:Hidden值为false,则触发RegisterClient脚本调用(不是定义,而是实际调用)showMsg()函数
- 实现Page_LoadComplete以检查隐藏值:如果为true,则以编程方式调用btnSubmitClick()
一定要熟悉Firebug和/或Fiddler,这样您就可以准确地看到呈现的HTML被发送回浏览器的内容。这将使您的web开发调试更加容易。我理解您的问题,建议您执行以下操作 1-将您的btSubmit保存在您的
public void btnSubmit_Click(Object o, EventArgs e)
{
if (checkFileExists(Convert.ToString(fileInfo)))
{
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Msg", "<script type=\"text/javascript\" language=\"javascript\">function showMsg(){return confirm(\"This image name already exists, do you want to replace it?\");}</script>", true);
btnSubmit.OnClientClick = "return showMsg()";
}
}
在第一个事件的RegisterClientScriptBlock中,使用jquery对话框的逻辑
4-在新按钮的新事件中,添加额外的逻辑:
if (something else)
{
// you´ll know the user click your confirm button already!!!
}
我希望这能对你有所帮助。鱼篮子戈多谢谢你指出其中的区别!真是帮了大忙
Page.ClientScript.RegisterClientScriptBlock直到我做了您指出的更改(即删除标记并添加'true'作为第四个参数)才触发。检查是否没有其他脚本块会反转未启动的脚本块所做的更改,以及脚本块是否具有唯一名称,这可能是一个好主意。Page.ClientScript.RegisterClientScriptBlock不工作的另一个原因是页面没有服务器端表单,例如
代码>今天早上我也遇到了同样的问题,它只是这样工作的:
Response.Write("<script type='text/javascript'>alert('" + AlerteMsg + "');</script>");
Response.Write(“警报(”)+AlerteMsg
Response.Write("<script type='text/javascript'>alert('" + AlerteMsg + "');</script>");