0

我想在 asp.net 按钮单击时弹出一个 js 警报框。我的代码是

 String jscript = @"<script language = 'javascript'> alert('This is my title');</script>";
 ClientScript.RegisterStartupScript(GetType(), "_jscript", jscript);

它工作正常,但我想稍后再有一些 js 弹出窗口进行一些验证,我假设我必须编写相同的代码,但不幸的是它不会在同一页面上加载其余的弹出窗口。

这与更新面板有关吗?

我正在验证的控件是

if (dp_menu.SelectedIndex > 0)
{
   //continue program
}
else
{
  //show popup
  //this pop p doesn't show up at all?
  String jscript = @"<script language = 'javascript'> alert('Another popup');</script>";
  ClientScript.RegisterStartupScript(GetType(), "_jscript", jscript);

}
4

3 回答 3

1

看看规范RegisterStartupScript,特别是备注部分:

客户端脚本由其密钥和类型唯一标识。具有相同键和类型的脚本被认为是重复的。页面中只能注册一个具有给定类型和密钥对的脚本。尝试注册已注册的脚本不会创建该脚本的副本。

如果您每次都通过相同的类型GetType()和相同的键 ,传递相同的类型"_jscript",那么只有第一次调用会导致任何<script>被渲染。这是设计使然。

糟糕的修复"_jscript":对于您执行的每个验证,用不同的密钥替换您不变的密钥"_valNameIsBlank",例如"_valNoItemSpecified".

更好的解决方法:通过以下方式避免让用户因多个验证弹出窗口而烦恼:

  • 编译List<string>所有验证失败
  • 完成所有检查后,查看列表中是否有任何项目
  • 如果是这样,请将它们连接成单个验证失败消息并在单个警报中显示。
于 2013-01-02T13:30:34.817 回答
0

在 RegisterStartupScript 中,每个脚本的键值应该不同

尝试不同的 KeyValues,而不是在所有脚本中使用“_jscript”。

于 2013-01-09T05:31:51.890 回答
0

我会给你一些更有效的东西,
服装控制

  1. 创建新的类库(Library_name)

将此类添加到库中

using System.Text;
using System.Web.UI;
using System.ComponentModel;

namespace ClientSide
{
    [DefaultProperty("Text"),
    ToolboxData("<{0}:MessageBox runat=server>" 
        + "</{0}:MessageBox>")]
    public class MessageBox : System.Web.UI.Control 
    {
        private string text="";
        [Bindable(true),
        Category("Appearance"),
        DefaultValue("")]
        public string Text
        {
            get {return text;}
            set {text = value;}
        }

        protected override void Render(HtmlTextWriter output)
        {
            if (text.Length>0)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("<script language='javascript'>");
                sb.Append("alert('"+text+"')");
                sb.Append("</script>");
                output.Write(sb.ToString());
            }
        }
    }
}

要使用它,您必须在 aspx 页面的顶部注册控件

<%@ Register TagPrefix="cc1" Namespace="ClientSide" Assembly="Library_Name" %>

3-然后您可以在aspx页面中像这样使用它

<cc1:MessageBox id="MessageBox1" runat="server" Text="popup Message"></cc1:MessageBox>
于 2013-01-02T13:11:00.987 回答