我有一个网站,它在很大程度上依赖于Creole解析器,允许在网站的几个区域(维基本身,论坛等)进行维基格式化。
在wiki中,Ii使用Literal
控件来显示呈现的文本(包含从原始克里奥尔语文本呈现的实际HTML元素)。代码基本如下:
<asp:literal id="renderedText" runat="server" />
----
string creoleText = db.GetTable<Wiki>().Where(w => w.ID == id).Single().CreoleText;
RenderEngine engine = new RenderEngine();
renderedText.Text = engine.Render(creoleText);
一切正常。
但是,尝试通过数据绑定和使用asp:Repeater
完成同样的事情,我似乎无法获取要呈现的文本。基本上我是这样做的:
<asp:repeater id="conversationRepeater" runat="server">
<!-- header template, itemtemplate, etc -->
<tr><td>
<asp:literal runat="server"
text='<%# DataBinder.Eval(Container.DataItem, "Content") %>' />
</td></tr>
----
RenderEngine engine = new RenderEngine();
var forumConversation = db.GetTable<ThreadMessage>()
.Select(t => new ThreadMessage
{
ID = t.ID,
Content = engine.Render(t.Content)
}
);
conversationRepeater.DataSource = forumConversation;
conversationRepeater.DataBind();
我最后得到的是原始克里奥尔语文本,而不是我需要的实际HTML元素的渲染文本。
答案 0 :(得分:1)
想想我会发布我带的解决方案。真的很简单。我只是创建了我的渲染引擎的静态版本,并在其中创建了一个我可以在我的数据绑定表达式中使用的扩展方法:
<%# ((string)DataBinder.Eval(Container.DataItem, "WikiText"))).Render() %>
完成。