2013-04-16 62 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:文字,但我喜欢的启动脚本更好,我想反映您的需求

干杯!