2011-01-05 9 views
3

私はニュース記事を表示するASP.NET MVCアプリケーションを持っています。メインの段落には、切り捨てとHTMLタグストリッパーがあります。例えば<p><%= item.story.RemoveHTMLTags().Truncate() %></p>ASP.NET MVC SubStringヘルプ

二つの機能が拡張からのものであり、以下のとおりである。

public static string RemoveHTMLTags(this string text) 
{ 
    return Regex.Replace(text, @"<(.|\n)*?>", string.Empty); 
} 
public static string Truncate(this string text) 
{ 
    return text.Substring(0, 200) + "..."; 
} 

しかし、私は新しい記事を作成するときには、このエラーがスローされますのみ3-4の言葉で話を持って言う:Index and length must refer to a location within the string. Parameter name: length

問題は何ですか?ありがとう

+1

だろう、私が持っている唯一の人にはできませんこのトピックが有用であり、そのようにアップされたことを発見しました – Myzifer

答えて

7
はこれにあなたの切り捨て機能を変更

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

} 

はるかに便利なバージョンが164のビューのうち

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

} 
+0

完璧な作品。ありがとうございました :) – Cameron

1

問題は、lengthパラメータが文字列よりも長いため、throwing an exception just as the function documentation statesです。

つまり、文字列が200文字でない場合、Substring(0, 200)は機能しません。

元の文字列の長さに基づいて部分文字列を動的に決定する必要があります。試してみてください:

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

どうすれば修正できますか?基本的には、200文字以上の長さの切り詰めが必要とされています。それらが200未満の場合、それを切り捨てるべきではありません。 – Cameron

+0

完璧に動作します。ありがとうございます:) – Cameron