0

这是所有必要的代码,

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

        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:未定义预览

我无法弄清楚这一点,我不确定为什么它不起作用。在我尝试过的javascript函数中:

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

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

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

对于评论:

好的,所以当我的函数看起来像这样时: var html = '<% Session["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);
        }

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

4

1 回答 1

1

也可能是您的 HTML 包含未转义的非法字符,这些字符会丢弃您的字符串值。'"/\

所以....

我会确保我在交接时逃脱和取消他们的逃脱。这方面也有最佳实践。我假设当您将其设置为标签的值时,ASP.net 正在缓冲输出,但是当您直接将其设置为 JS 时,您会遇到冲突。

此外,我们使用

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

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

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

干杯!

于 2013-04-16T19:06:58.310 回答