【发布时间】:2009-12-09 22:23:40
【问题描述】:
我正在寻找一种将编辑器控件(来自 ASP.NET AJAX 控件工具包)添加到转发器的每个元素的方法。如果我只是将它包含在转发器的 ItemTemplate 中,它工作正常,但我的问题是它产生的标记很大,这会大大减慢页面速度(即使打开压缩)。
我没有任何运气使用更新面板在中继器项内添加控件 - 我认为这可能是首选方法,但在中继器项内的更新面板内动态添加控件并不是我的事已经取得了成功,但我似乎找不到任何好的例子。
我考虑的另一种选择是使用 PageMethods 呈现控件并将 HTML 发送回页面以让 javascript 将其放在适当的位置,然后处理它,但它不会让我呈现控件 -我收到“页面不能为空。请确保在 ASP.NET 请求的上下文中执行此操作。”的 InvalidOperationException。我的猜测是,生成的所有 javascript 都使得我不能只即时渲染编辑器控件。
你能指出我完成这项工作的正确方向吗?
谢谢
编辑:如果可能的话,另一种选择是在页面的标记中放置一个普通的编辑器控件,然后根据需要使用 javascript 在转发器内部移动它。我可以使用普通控件执行此操作,但是当我使用编辑器执行此操作时,它的行为并不好 - 出现文本框,但不允许我在其中单击。如果您对此有任何想法,我也将不胜感激。这是代码:
<span id="spanHiddenEditor" style="display: block;">
<cc1:Editor ID="ed1" runat="server" Height="200" Width="400" />
</span>
<script type="text/javascript">
function createTextBox(idx) {
var span = $get("span1_" + idx); // this gets me the target location
var hiddenEditorSpan = $get("spanHiddenEditor")
var editorHtml = hiddenEditorSpan.innerHTML;
hiddenEditorSpan.innerHTML = "";
span.innerHTML = editorHtml;
}
</script>
【问题讨论】:
-
我永远无法完成这项工作,因此我做了一个解决方法,在伪弹出窗口中显示我的编辑器控件,以便它在页面上仅出现一次,在转发器之外。我作弊并将转发器项目中的信息放入隐藏字段,以便当页面提交时,我能够追踪转发器中的哪个项目负责回发。不是一个完美的解决方案,但它有效。我没有 SO 点来结束这个问题,所以如果有人想结束它,请随意。
标签: asp.net ajax updatepanel ajaxcontroltoolkit pagemethods