Javascript警报使用asp.net

本文关键字:asp net Javascript | 更新日期: 2023-09-27 17:50:18

我想在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);
}

Javascript警报使用asp.net

查看RegisterStartupScript的规范,特别是comments部分:

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

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

:在每次执行验证时,用不同的键替换不变的键"_jscript",例如"_valNameIsBlank", "_valNoItemSpecified"

更好的修复:避免使用多个验证窗口惹恼用户:

    编译所有验证失败的List<string>
  • 所有检查后,看看列表中是否有任何项目
  • 如果是,将它们连接成单个验证失败消息,并在单个警报中显示。

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

  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>

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

尝试不同的KeyValues而不是在所有脚本中使用"_jscript"