.net 索引和长度必须引用字符串中的位置?

.net 索引和长度必须引用字符串中的位置?,.net,asp.net,vb.net,c#,.net,Asp.net,Vb.net,C#,我正在尝试获取前50个字母,因此我使用了子字符串函数来获取它 如您所见,我使用了以下代码: <%# Eval("BannerDescription").ToString.Substring(1, 50)%> 但不幸的是,它不起作用,出现了一条错误消息: 索引和长度必须引用字符串中的位置 那么有没有其他方法来解决这个问题呢 因为用户是控制数据输入的人!有时他会输入10个字母,有时可能输入1000个字母,那么我该如何解决这个问题呢 我都试过了,但我们可以这样使用吗: 49,Eval

我正在尝试获取前50个字母,因此我使用了
子字符串
函数来获取它

如您所见,我使用了以下代码:

<%# 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)) %>