我有一个ASP gridview控件。我在项目模板列中有一个ASP标签控件。我使用 -
将数据绑定到网格<ItemTemplate>
<asp:Label ID="lblDesc" runat="server" Text='<%# Eval("Description") %>'></asp:Label>
</ItemTemplate>
但是,此字符串的值最多为80个字符。但是,我不能让列长度如此之高。并且,存在一些限制因此我无法使用Wrap="true"
并限制列宽。
所以,我认为解决方案可能只是在网格中显示大约50个字符,并将整个字符串显示为工具提示。我设法通过使用这个 -
来做到这一点<ItemTemplate>
<asp:Label ID="lblDesc" runat="server" Text='<%# Eval("Description").ToString().Substring(0,50) %>' ToolTip='<%# Eval("Description") %>'></asp:Label>
</ItemTemplate>
这将显示网格列中字符串的前50个字符。并且,当鼠标指针悬停在文本上时,完整的字符串将显示为工具提示。但是,当字符串长度小于50个字符时会出现问题。在这种情况下,抛出异常。
我尝试修改这段代码以通过检查字符串长度来允许条件显示。但是,我无法让它发挥作用。
有没有办法解决这个问题?我们可以在Eval()中调用javascript函数吗?
答案 0 :(得分:3)
每当您需要对数据绑定表达式进行特殊处理时,您只需在代码隐藏中创建辅助函数,例如
protected string EvalWithMaxLength(string fieldName, int maxLength)
{
object value = this.Eval(fieldName);
if (value == null)
return null;
string str = value.ToString();
if (value.Length > maxLength)
return value.SubString(0, maxLength);
else
return value;
}
在ASPX / ASCX中,您可以说
<ItemTemplate>
<asp:Label ID="lblDesc" runat="server" Text='<%# EvalWithMaxLength("Description", 50) %>' ToolTip='<%# Eval("Description") %>'></asp:Label>
</ItemTemplate>
如果您想将Eval
和截断分开,可以制作一般的扩展方法,例如
public static class MyExtensions
{
public static string ToStringTruncated(this object value, int maxLength)
{
if (value == null)
return null;
string str = value.ToString();
if (value.Length > maxLength)
return value.SubString(0, maxLength);
else
return value;
}
}
并致电
Text='<%# Eval("Description").ToStringTruncated(50) %>'
因为您已为类型object
制作了此扩展方法,所以现在也可以说
1234.ToStringTruncated(3) // == "123"
你是否喜欢这是一个品味问题。
答案 1 :(得分:2)
尝试这样的事情:
public static string TruncateString(string longString, int maxLength)
{
if (string.IsNullOrEmpty(longString) || longString.Length <= maxLength)
{
return longString;
}
else
{
return longString.Substring(0, maxLength);
}
}
那么你在aspx中的代码就像是:
<%# TruncateString(Eval("FieldName").ToString(), 150) %>
您可能还想在上面添加一个postFix
参数,以便截断字符串附加一个省略号(...)来警告用户它们已被截断。
我喜欢在实用程序类中保留这样的内容,以便它们在整个应用程序中都可用。我也认为最好不要将这个和Eval组合成一个单独的方法,因为a)他们做了非常不同的事情,并且b)你可能想要使用上面你没有使用Eval的地方。 / p>
编辑:如果要在不抛出空引用异常的情况下允许Eval(“FieldName”)为空,请改用:
<%# TruncateString((Eval("FieldName") ?? "").ToString(), 150) %>