2010-10-22 33 views
2

我想从catch代码块后面的ascx控制代码调用JavaScript函数。 我尝试了以下两种方式,但它们似乎不起作用。从代码beind调用JavaScript函数(c#)catch block

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

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

如果我把代码在 “pageLoad的” 函数的调用,但放在抓block.Should时不会被调用我做任何不同于从catch块中调用JavaScript函数。请建议。

感谢

+0

要问一个愚蠢的问题>大家都知道,当一个异常被抛出的catch块只执行? – 2010-10-22 13:39:28

+0

这正是我想要实现的。当我想调用一个javascript函数时发生异常。 – San 2010-10-22 14:26:00

回答

1

可能想试试这个: 的.cs

public String ScriptToRun = "test();"; 

的.aspx

$(document).ready(function() {<%=ScriptToRun %>}); //or you can register event to document mannually 

请记住,无论你在做后台会生成HTML,CSS &的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> 
+0

当我在Catch块中分配时,它不工作。 – San 2010-10-22 11:21:21

+0

@San我试了下面,它适用于我的情况。 – jebberwocky 2010-10-23 05:04:37

+0

我的场景是 - 我在母版页上有一个按钮,在弹出窗口中打开一个aspx页面。当我在弹出屏幕上单击“保存”按钮时,在执行保存操作后关闭弹出屏幕。如果发生错误,我将不得不在母版页中的字段上显示错误消息。尝试catch块在弹出页面。 – San 2010-10-25 10:02:57

0

什么是catch块和在哪里呢?

如果执行catch块中的代码,通常意味着失败了,也许这个失败也是JS调用没有通过的原因。

+0

如果存在拒绝异常的情况,我必须在页面顶部显示一条消息并且应用了一些CSS样式。所以我试图调用一个这样做的JavaScript函数。 – San 2010-10-22 12:14:03

+0

这是通过回发,ajax还是通过从开始加载页面调用的?脚本是在正确的时间运行(在页面呈现后)还是尝试在未完成的页面上运行? – 2010-10-22 14:54:06

+0

它在回发中被调用。在页面加载时,如果我调用它的工作函数.even - Page.ClientScript.RegisterStartupScript(typeof(string),“script”,“Javascript:alert('test');”,true);不会在catch块中发出警报 – San 2010-10-22 15:35:20

2

你试过吗?

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

如果这相当于问题中的ScriptManager选项,我无法回想起我的头顶。

此外,您需要确保您传递的“脚本键”值是唯一的,否则asp.net将放弃除注册脚本的第一个实例以外的所有键,并使用相同的键。

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);