2013-04-16 98 views
0

這裏是所有一旦創建了控制,我把代碼應該是必要的,傳遞ASP.NET會話變量與JavaScript

我創建了一個控制功能中,無論是文本框單選按鈕,列表等。它在面板上,然後執行以下操作:

 StringBuilder sb = new StringBuilder(); 
     StringWriter sw = new StringWriter(sb); 
     HtmlTextWriter hw = new HtmlTextWriter(sw); 
     panel.RenderControl(hw); 
     Session["formHTML"] = sb.ToString(); 
     Label1.Text = sb.ToString(); 

Label1文本出來完美。它正是它應該是什麼,這是我從Panel.RenderControl(hw)線獲得的面板的html。這是我的問題。點擊一個按鈕,我有:

Response.Redirect("~/preview.aspx"); 

,這裏是我的preview.aspx網頁上的代碼:

<script type="text/javascript"> 

    function preview() { 
     var html = '<%= Session["formHTML"]%>'; 
     alert(html); 
     $('#previewForm').empty(); 
     $('#previewForm').append(html); 
    } 
</script> 

<body onload="preview()"> 
    <form id="form1" runat="server"> 
     <div id="previewForm"> 
     </div> 
    </form> 
</body> 

我的問題是被傳遞給函數的會話變量。它不會在我的功能中發出警報。現在我有另一個會話變量,Session["formID"]。當我把Session[FormID]放在我的javascript函數中而不是Session["formHTML"]時,它可以很好地工作。如果ID是434,則附加到我指示的div標籤。現在formHTML具有HTML作爲字符串。由於某種原因,它不喜歡這樣。我收到以下錯誤:

Uncaught SyntaxError: Unexpected token ILLEGAL Uncaught

ReferenceError: preview is not defined

我無法弄清楚這一點,我不知道爲什麼它不起作用。我的JavaScript函數中我曾嘗試:

 var html = '<%= Session["formHTML"].ToString()%>'; 

 var html = "'" + '<%= Session["formHTML"]%>' + "'"; 

我只嘗試了這些,因爲我想通JavaScript中的HTML沒有被呈現爲字符串正確。我清楚地不知道爲什麼我得到這個錯誤,這就是爲什麼我沒有任何想法如何解決它。

的意見:

好了,所以當我的函數看起來像這樣:var HTML ='<%會話[ 「formHTML」]%>它呈現爲:

 function preview() { 
      var html = '<div id="panel0" class="panelHeader" class="box ui-draggable" data-ui-widget="draggable"> 
    <span id="mylabel">mylabel</span><span id="lbl0" onclick="deleteControl(panel0)" style="color:Red;">x</span> 
</div>'; 
      alert(html); 
      $('#previewForm').empty(); 
      $('#previewForm').append(html); 
     } 

看起來正確的對我來說,但仍然產生錯誤

+0

您是否在JavaScript控制檯上發現了該錯誤?如果錯誤發生在JavaScript中,請顯示呈現給頁面的實際JavaScript。服務器端代碼對此沒有幫助。 – David

+0

我不知道你在問我什麼。我的意思是該函數與不包含html的會話變量一起工作。當我使用具有html的會話變量我得到未捕獲的SyntaxError:意外的令牌非法未捕獲的錯誤。我不知道你還問我要告訴你什麼 ReferenceError:預覽沒有定義 –

+0

那麼,對於初學者來說,你會得到那個錯誤?在服務器端代碼或客戶端代碼?如果它在客戶端代碼中,那麼您需要告訴我們客戶端上實際運行的是什麼。 'var html =「'」+'<%= Session [「formHTML」]%>'+「'」;'是服務器上的內容,但這不是JavaScript執行的內容。我們需要查看JavaScript代碼中呈現給客戶端的內容,以確定爲什麼會出現錯誤。很明顯,這聽起來像你正在渲染的東西到頁面,是不合法的JavaScript。 – David

回答

1

它也可能是您的HTML已非轉義的非法字符,將您的字符串值拋出。 「「/ \

所以....

我想確保我逃跑,他們未逸出的切換。有最佳實踐上也是如此。我假設,即ASP.net是緩衝當你把它設置爲標籤的值,但是當你將它設置爲JS直接與你得到的衝突,我們使用

  Page.ClientScript.RegisterStartupScript(this.GetType(), "set_campaign", "$(document).ready(function(){ setCampaignID(" + Request.QueryString["campaign_id"] + ");});", true); 

輸出。

也插入腳本到頁面,而不是<%tags%>。標籤將正常工作,但使用不正確可能會導致未設置的值和缺乏經驗的程序員的問題,與將其注入到沒有依賴關係的工作腳本中。就像你現在面臨的挑戰一樣。

您也可以替換一個asp:文字,但我喜歡的啓動腳本更好,我想反映您的需求

乾杯!