很抱歉,如果帖子标题不清楚,我会在这里尝试解释一下。
我正在使用一个数据绑定到数据表的Web控件。数据输出如下:
<asp:Repeater ID="RssRepeater" Visible="false" EnableViewState="false" runat="server">
<asp:literal ID="sb_description" Text='<%# DataBinder.Eval (Container.DataItem, "description") %>' EnableViewState="false" runat="server" />
''// Rest of structure...
</asp:Repeater>
我写了一个函数,理论上应该将传递的字符串修剪为指定数量的单词:
protected string CreateTeaser(string Post)
{
int wordLimit = 50;
System.Text.StringBuilder oSB = new System.Text.StringBuilder();
string[] splitBy = new string[] { " " };
string[] splitPost = Post.Split(splitBy,
System.StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i <= wordLimit - 1; i++)
{
oSB.Append(string.Format("{0}{1}", splitPost[i],
(i < wordLimit - 1) ? " " : ""));
}
oSB.Append(" ...");
return oSB.ToString();
}
我试过这种可憎的行为:
<asp:literal ID="sb_description" Text='<%= CreateTeaser(%> <%# DataBinder.Eval (Container.DataItem, "description") %><%=); %>' EnableViewState="false" runat="server" />
但当然它不起作用。那么,当它在这个文字控件中时,是否可以在Databinder.Eval( ... )
上使用此函数?如果是这样,我该怎么做呢?如果没有,那么我可以做什么的替代方案呢?
非常感谢!
答案 0 :(得分:2)
您可以将Eval
结果直接提交给您的方法(使用原始Eval
语法并转换为字符串):
<asp:literal
ID="sb_description"
Text='<%= CreateTeaser((string)DataBinder.Eval (Container.DataItem, "description")) %>'
EnableViewState="false"
runat="server"
/>
答案 1 :(得分:1)
在RowDataBound事件中这样做会容易得多。
答案 2 :(得分:0)
我不会使用&lt;%#bleh%&gt;完全是为了这个。您可以使用asp:Repeater的OnItemDataBound事件在代码隐藏中对Repeater进行数据绑定。
只需设置转发器的数据源并在其上调用DataBind。
List<stuff> feeds = //list of rss feeds, I am guessing.
RssRepeater.DataSource = feeds;
RssRepeater.DataBind();
然后你可以在事件
中为每个项目做更具体的事情protected void RssRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
Literal label = (Literal)e.Item.FindControl("sb_description");
label.Text = CreateTeaser(post); //post coming from your repeater somewhere. I can't see its definition
//post could probably be e.Item.DataItem, depending on how you do your DataSource
}
这种方法比弄乱你的aspx更容易阅读和维护