2011-03-24 63 views
0

我有一个网站,在很大程度上依赖于克里奥尔解析器允许维基站点(维基本身,论坛等)ASP:文字绑定特质

在维基的几个领域格式化,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元素呈现的文本。

回答

1

想我会发布我去的解决方案。这真的很简单。我只是创建我的渲染引擎并在它的静态版本,创建了我可以在我的绑定表达式中使用扩展方法:

<%# ((string)DataBinder.Eval(Container.DataItem, "WikiText"))).Render() %> 

完成。