我在页面中添加了一个javascript函数
<head>
<script type=text/javascript>
function show_Alert(error)
{
alert(error);
}
</script>
</head>
并点击按钮我正在执行此操作
Protected void btn_Click(object o,Eventargs e)
{
StringBuilder str = new StringBuilder();
str.AppendLine("show_Alert('XYZ error')");
ClientScript.RegisterStartupScript(GetType(),"Alert",str.ToString(),true);
}
但它抛出JS错误show_Alert未定义:(
任何想法,这里有什么问题?
感谢名单
答案 0 :(得分:4)
您的脚本标记错误 将其更改为
<script type="text/javascript">
但是,我认为这不是问题
我怀疑RegisterStartupScript
在你的函数之前发出<script>
块,所以它最终会在函数存在之前调用它。
检查每个<script>
在渲染源中的位置。
答案 1 :(得分:2)
确保您的<script>
元素有效,如下所示:
<head>
<script type="text/javascript">
function show_Alert(error)
{
alert(error);
}
</script>
</head>
如果格式不正确,或者type
无法识别(你的案例同时存在),那么内部脚本将被忽略,因为浏览器不知道如何处理它。
答案 2 :(得分:0)
以下是一个例子:
<%@ Page Language="C#" %>
<script type="text/C#" runat="server">
protected void BtnClick(object sender, EventArgs e)
{
var str = "XYZ Error";
var script = new StringBuilder();
script.AppendFormat("showAlert('{0}');",
HttpUtility.JavaScriptStringEncode(str)
);
ClientScript.RegisterStartupScript(GetType(), "alert", script.ToString(), true);
}
</script>
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript">
function showAlert(error) {
alert(error);
}
</script>
</head>
<body>
<form id="Form1" runat="server">
<asp:LinkButton ID="Btn" runat="server" Text="Click me" OnClick="BtnClick" />
</form>
</body>
</html>
要注意的一件非常重要的事情是正确编码传递给showAlert
函数的字符串。请注意它是encoded:
script.AppendFormat("showAlert('{0}');",
HttpUtility.JavaScriptStringEncode(str)
);
如果您不对其进行编码,并且该字符串包含一些特殊字符,例如'
,则您的脚本将会中断。