[英]Javascript alert using asp.net
我想在單擊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);
}
看一下RegisterStartupScript
的規范 ,特別是“備注”部分:
客戶端腳本由其鍵和類型唯一標識。 具有相同鍵和類型的腳本被視為重復腳本。 頁面上只能注冊具有給定類型和密鑰對的一個腳本。 嘗試注冊已注冊的腳本不會創建該腳本的副本。
如果每次通過GetType()
和相同的鍵"_jscript"
傳遞相同的類型,則僅第一個調用將導致呈現任何<script>
。 這是設計使然。
較差的解決方案 :對於您執行的每個驗證,請將不變的密鑰"_jscript"
替換為其他密鑰,例如"_valNameIsBlank"
, "_valNoItemSpecified"
。
更好的解決方案 :通過以下方法避免用多個驗證彈出窗口來煩擾用戶:
List<string>
我會給你一些更有效的方法,
服裝控制
將該類添加到庫中
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中,每個腳本的鍵值應不同
請嘗試使用不同的鍵值,而不要在所有腳本中都使用“ _jscript”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.