从Razor View中的Html.Raw中删除img标签

时间:2013-06-11 15:51:05

标签: asp.net-mvc razor replace substring

我正在开发一个ASP.Net MVC4 Web应用程序,它有一个显示新闻文章列表的新闻部分。该列表显示每篇文章的新闻标题,然后打印出新闻文本的前400个字符,因为这只是一个摘要页面。当用户点击新闻标题时,他们就可以完整地看到新闻文章了。

要向网站添加新闻文章,我使用FCKEditor作为富文本编辑器,该编辑器还允许用户上传图像以伴随文本。当我打印出每篇新闻文章的前400个字符时,我就这样做了

@Html.Raw(news.newsText.Substring(0, 400))

只要前400个字符中没有图像标记,这就可以正常工作,但是,如果用户将图像添加到前400个字符的文本中,则图像会显示在新闻摘要中,这使它看起来像凌乱。

相反,如果前400个字符中有图像标记,我宁愿不显示它,而只是显示文本。

我想知道这是否可行?

谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

在你使用剃须刀之前,你可以使用这样的代码在控制器中剥离它们。

var news = news.newsText.Substring(0, 400);
news = Regex.Replace(news, @"<img\s[^>]*>(?:\s*?</img>)?", "", RegexOptions.IgnoreCase);

但是,我建议使用像Html Agility Pack这样的任务来完成这些任务。

答案 1 :(得分:1)

您可以使用正则表达式从HTML中删除所有<img>标记,然后从中删除400个字符。

您可以为此创建自己的扩展方法,如下所示:

public static class StringExtensions
{
    public static string SkipImgTags(this string html, int length)
    {
       string strWithoutImgTags = Regex.Replace( html, @"(<img\/?[^>]+>)", @"", RegexOptions.IgnoreCase );

        return strWithoutImgTags.Substring(strWithoutImgTags.Length - length);
    }
}

然后,在您的代码中,您可以按以下方式调用它:

@Html.Raw(news.newsText.SkipImgTags(400))