将ASP.NET会话变量传递给JavaScript

时间:2013-04-16 18:28:53

标签: javascript asp.net html session-variables

以下是所有必要的代码,

在一个函数内部我创建一个控件,一个文本框单选按钮列表等,一旦创建了控件,我把它放在一个面板中然后执行以下操作:

        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作为字符串。由于某种原因,它不喜欢这个。我收到以下错误:

  

未捕获的SyntaxError:意外的令牌ILLEGAL Uncaught

     

ReferenceError:未定义预览

我无法弄清楚这一点,我不知道为什么它不起作用。在我的javascript函数里面我试过了:

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

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

我只试过这些因为我认为html没有在javascript中正确呈现为字符串。我显然不知道为什么我会收到这个错误,这就是为什么我对如何修复它没有任何想法。

评论:

好的,所以当我的函数看起来像这样:var html ='&lt;%Session [“formHTML”]%&gt;它呈现为:

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

看起来对我来说,但仍然会产生错误

1 个答案:

答案 0 :(得分:1)

也可能是您的HTML没有未转义的非法字符会丢弃您的字符串值。 ““/ \

...所以

我会确保我在交接中逃脱并超越它们。这方面也有最佳实践。我假设当你将它设置为标签的值时,ASP.net正在缓冲输出,但当你直接将它设置为JS时,就会发生冲突。

另外,我们使用

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

要将脚本插入页面,而不是&lt;%tags%&gt;。标签可以正常工作,但使用不当可能会导致未设置值和缺乏经验的程序员出现问题,而不是将其注入到没有依赖关系的工作脚本中。就像你现在面临的挑战一样。

您也可以替换asp:literal,但我更喜欢启动脚本,我认为反映了您的需求

干杯!