我有一个转发器,显示我的Projects表中的数据.有projectId,名称和描述.我在描述中使用了Substring(1,240).但有时字符串短于240,所以我得到了ArgumentOutOfRangeException.如果我得到例外,你能告诉我如何显示整个文本吗?这是我的代码.
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<asp:Panel ID="pnlDisplayProjects" runat="server" Visible="true">
<center><h2><b>???????</b></h2></center>
<asp:Repeater ID="rptrProjects" runat="server">
<HeaderTemplate>
<table border="1" cellpadding="2" cellspacing="2" align="center" width="80%" style="background-color:#F7F6F3;">
</HeaderTemplate>
<ItemTemplate>
<tr>
<td align="left" style="width:40px">
<asp:Label ID="LblProjectId" runat="server" Text='<%# Eval("ProjectID") %>' />
</td>
<td align="center">
<asp:Label ID="LblName" runat="server" Text='<%# Eval("Name") %>' />
</td>
</tr>
<tr>
<td colspan="2">
<asp:Label ID="LblDescription" runat="server" Text='<%# Eval("Description").ToString().Substring(1, 240) + "..." %>'/>
<asp:HyperLink ID="HlMore" runat="server" NavigateUrl='<%#"~/Project/ViewProject.aspx?projectId=" + Eval("ProjectID") %>' Text="More" />
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</asp:Panel>
Run Code Online (Sandbox Code Playgroud)
protected override void OnPreRender(EventArgs e)
{
var table = Projects.GetTableWithProjects();
if (table.Rows.Count > 0)
{
rptrProjects.DataSource = table;
rptrProjects.DataBind();
}
else
{
pnlDisplayProjects.Visible = false;
Master.PrintMessage("There are no projects.");
}
}
Run Code Online (Sandbox Code Playgroud)
Ior*_*nev 38
string dec = "description";
string result = dec.Substring( 0, dec.Length > 240 ? 240 : dec.Length )
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 37
如果您使用的是.NET 3.5,我建议您编写一个单独的扩展方法.像这样的东西:
public static string SafeSubstring(this string text, int start, int length)
{
return text.Length <= start ? ""
: text.Length - start <= length ? text.Substring(start)
: text.Substring(start, length);
}
Run Code Online (Sandbox Code Playgroud)
基本上这是一个版本,Substring除非开始或长度为负,否则永远不会抛出异常(在这种情况下,我不知道它能合理地返回什么).
你这样称呼它:
Eval("Description").ToString().SafeSubstring(1, 240) + "..."
Run Code Online (Sandbox Code Playgroud)
这样做的缺点是它将包括省略号(...),即使它实际上根本没有截断字符串...
Flo*_*lkl 13
description.Substring(0, Math.Min(description.Length, 240));
Run Code Online (Sandbox Code Playgroud)
基于 Jon Skeet 的回答,我认为它应该检查 null 否则它不是一个完全安全的方法:)
public static string SafeSubstring(this string text, int start, int length)
{
if (text == null) return null;
return text.Length <= start ? ""
: text.Length - start <= length ? text.Substring(start)
: text.Substring(start, length);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26945 次 |
| 最近记录: |