以下是所有必要的代码,
在一个函数内部我创建一个控件,一个文本框单选按钮列表等,一旦创建了控件,我把它放在一个面板中然后执行以下操作:
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);
}
看起来对我来说,但仍然会产生错误
答案 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,但我更喜欢启动脚本,我认为反映了您的需求
干杯!