.net 索引和长度必须引用字符串中的位置?
我正在尝试获取前50个字母,因此我使用了.net 索引和长度必须引用字符串中的位置?,.net,asp.net,vb.net,c#,.net,Asp.net,Vb.net,C#,我正在尝试获取前50个字母,因此我使用了子字符串函数来获取它 如您所见,我使用了以下代码: <%# Eval("BannerDescription").ToString.Substring(1, 50)%> 但不幸的是,它不起作用,出现了一条错误消息: 索引和长度必须引用字符串中的位置 那么有没有其他方法来解决这个问题呢 因为用户是控制数据输入的人!有时他会输入10个字母,有时可能输入1000个字母,那么我该如何解决这个问题呢 我都试过了,但我们可以这样使用吗: 49,Eval
子字符串
函数来获取它
如您所见,我使用了以下代码:
<%# Eval("BannerDescription").ToString.Substring(1, 50)%>
但不幸的是,它不起作用,出现了一条错误消息:
索引和长度必须引用字符串中的位置
那么有没有其他方法来解决这个问题呢
因为用户是控制数据输入的人!有时他会输入10个字母,有时可能输入1000个字母,那么我该如何解决这个问题呢
我都试过了,但我们可以这样使用吗:
49,Eval(“BannerDescription”).ToString().Substring(0,49),Eval(“BannerDescription”)%%>
谢谢。50大于结果字符串的长度,如果这是真的,代码在任何情况下都会失败。您不能提供大于其中字符数量的参数。 使用String.Length属性进行操作,该属性将为您提供字符串中的字符数。因此,如果您的字符串长度超过50个字符(或等于50个字符),您可以说您将获得前50个字符,否则您只能获得略小于50个字符的整个字符串 您可以使用以下代码: Eval(“BannerDescription”).ToString()长度>49?Eval(“BannerDescription”).ToString()子字符串(0,49):Eval(“BannerDescription”).ToString() 问候,,
Peter您应该能够实现一个函数,如果该函数太长,它将为您提供一个较短的版本:
<%
Function ShortVersion (strData, strLen)
If Len (strData) > strLen Then
ShortVersion = Left (strData, strLen)
Else
ShortVersion = strData
End If
End Function
%>
strLen然后
短版本=左(标准数据,标准格式)
其他的
ShortVersion=strData
如果结束
端函数
%>
注意:此答案适用于,因为在发布此答案时,问题带有此特定标签
这将为您提供不超过50个字符:
<%# Eval("BannerDescription").ToString().Length > 50 ? Eval("BannerDescription").ToString().Substring(0, 50) : Eval("BannerDescription").ToString() %>
这样看起来更干净。:-) 使用下面的代码片段,我已经在我的项目中多次使用过它
<%# Eval("BannerDescription").ToString().Length <= 22 ? Eval("BannerDescription") : string.Format("{0}....", Eval("BannerDescription").ToString().Substring(0,22))%>
如果这是您的问题,并且您正在使用.NET 3.5,您可以尝试:
public static class StringEx
{
public static string SubstringNE(this string str, int index, int length)
{
if (index >= str.Length)
{
return String.Empty;
}
if (index + length > str.Length)
{
return str.Substring(index);
}
return str.Substring(index, length);
}
}
您可以使用与子字符串
相同的方式调用它,但它不会抛出错误的索引/长度。举个例子:
NE
表示“无例外”。可能是这样的-
<%# Eval("BannerDescription").ToString().Substring(0, Math.Min(Eval("BannerDescription").ToString().Length, 50)) %>
Yes-不要指定大于字符串的长度。错误消息会准确地告诉您问题所在。是的,我知道。因为用户是控制数据输入的人!有时他会输入10窝,有时可能1000窝我怎么解决这个问题?呃,检查长度。(说真的,谁投了这个票?)。如果长度参数比字符串长,则子字符串应返回到字符串的末尾。这就是所有以前版本的Basic使用Left()函数的工作方式。大多数时候,我使用子字符串是为了替换.net中缺少的Left()和Right()函数。在什么情况下返回这个长度错误会有帮助?我必须同意Brad Mathews的观点。我已经被这个完全荒谬的例外情况缠住好几次了。是的,我知道。因为用户是控制数据输入的人!有时他会输入10个垃圾,有时可能输入1000个垃圾,我怎么才能解决这个问题?@HAJJAJ,这是一封信,而不是一个垃圾。也许更正确的说法是将其称为字符。此处不能使用“?”字符。啊哈,这解释了为什么它不起作用。不知道这是否可能(我是新来的),但你应该调整你的问题标签;添加vb.net并删除C#…Take不是字符串的成员@朝觐:Take是Linq的一部分,因为string是IEnumerable,所以可以使用Take。但是,子字符串可能是更好的选择。添加到页面上此处不能使用“?”字符我认为这是用于c#而不是用于vb.net
<%# new string(Eval("BannerDescription").ToString().Take(50).ToArray()) %>
public static class StringEx
{
public static string SubstringNE(this string str, int index, int length)
{
if (index >= str.Length)
{
return String.Empty;
}
if (index + length > str.Length)
{
return str.Substring(index);
}
return str.Substring(index, length);
}
}
<%# Eval("BannerDescription").ToString().Substring(0, Math.Min(Eval("BannerDescription").ToString().Length, 50)) %>