我试图从catch块中的ascx控制代码调用JavaScript函数。 我尝试了以下两种方式,但它们似乎没有用。
Page.ClientScript.RegisterClientScriptBlock(typeof(string), "script", "test();", true);
ScriptManager.RegisterStartupScript(Page, GetType(), "err_msg", "alert('error');", true);
如果我将代码放在“PageLoad”下但是在放入catch块时没有被调用,则调用该函数。我应该从catch块调用JavaScript函数做任何不同的操作。请建议。
由于
答案 0 :(得分:2)
你试过这个吗?
Page.ClientScript.RegisterStartupScript(typeof(string), "script", "test();", true);
如果这相当于问题中的ScriptManager选项,我就不能回想起我的脑海。
此外,您需要确保传入的“脚本键”值是唯一的,否则asp.net将使用相同的键丢弃除注册脚本的第一个实例以外的所有实例。
答案 1 :(得分:1)
可能想尝试一下: 的.cs
public String ScriptToRun = "test();";
的.aspx
$(document).ready(function() {<%=ScriptToRun %>}); //or you can register event to document mannually
请记住,无论你在后端做了什么,都会生成HTML,Css&amp; javascript到浏览器。
的更新强> 的 我尝试了以下代码,它适用于我的情况。你能提供更多细节吗? 的.cs
public String script = "";
protected void Page_Load(object sender, EventArgs e)
{
throwExcep();
}
private void throwExcep()
{
try
{
throw new NotImplementedException();
}
catch (Exception e)
{
script = "console.log('exception throws from backend message: ["+e.Message+"]')";
}
}
的.aspx:
<script>
$(document).ready(function(){
<%=script %>
});
</script>
答案 2 :(得分:1)
Javascript不喜欢所有特殊字符和NewLine(\ r \ n)字符。替换所有这些,它将起作用。
示例:
string test = msgError.Replace("'", "");
test = Server.HtmlEncode(test).Replace(Environment.NewLine, "<br />");
Page.ClientScript.RegisterStartupScript(
typeof(string),
"MyKeyCatch",
//script,
"showErrorMessage('"+test+"');",
true);
答案 3 :(得分:0)
什么是捕获块以及它在哪里?
如果执行catch块中的代码,通常意味着某些操作失败,也许失败也是JS调用未通过的原因。