从代码隐藏(c#)catch块调用JavaScript函数

时间:2010-10-22 10:35:57

标签: c# javascript asp.net

我试图从catch块中的ascx控制代码调用JavaScript函数。 我尝试了以下两种方式,但它们似乎没有用。

  1. Page.ClientScript.RegisterClientScriptBlock(typeof(string), "script", "test();", true);

  2. ScriptManager.RegisterStartupScript(Page, GetType(), "err_msg", "alert('error');", true);

  3. 如果我将代码放在“PageLoad”下但是在放入catch块时没有被调用,则调用该函数。我应该从catch块调用JavaScript函数做任何不同的操作。请建议。

    由于

4 个答案:

答案 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调用未通过的原因。