开发者

ASP.NET MVC SubString help

I have an ASP.NET MVC app that shows news articles and for the main paragraph I have a truncate and HTML tag stripper. e.g. <p><%= item.story.RemoveHTMLTags().Truncate() %></p>

The two functions are from an extension and are as follows:

public static string RemoveHTMLTags(this string text)
{
    return Regex.Replace(text, @"<(.|\n)*?>", string.Empty);
}
publi开发者_如何学Goc static string Truncate(this string text)
{
    return text.Substring(0, 200) + "...";
}

However when I create a new article say with a story with only 3-4 words it will throw this error: Index and length must refer to a location within the string. Parameter name: length

What is the problem? Thanks


Change your truncate function to this:

public static string Truncate(this string text) 
{     
    if(text.Length > 200)
    {
        return text.Substring(0, 200) + "..."; 
    }
    else
    {
        return text;
    }

} 

A much more useful version would be

public static string Truncate(this string text, int length) 
{     
    if(text.Length > length)
    {
        return text.Substring(0, length) + "..."; 
    }
    else
    {
        return text;
    }

} 


The problem is that your length parameter is longer than the string, so it's throwing an exception just as the function documentation states.

In other words, if the string isn't 200 characters long, Substring(0, 200) doesn't work.

You need to dynamically determine the substring based on the original string's length. Try:

return text.Substring(0, (text.Length > 200) : 200 ? text.Length);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜