2010-10-22 35 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);