我遇到了剃须刀和模型的问题。MVC.net剃刀子串中的问题
在我看来,我有一个与“文章”对象列表的模型。
所以我做了一个foreach @MvcHtmlString.Create(article.Intro)
这很好。
然后,当我想要介绍的一个子:
@MvcHtmlString.Create(article.Intro).ToHtmlString().Substring(0, 50)
的页面中无限循环结束没有错误(当剃刀无法呈现的东西这经常发生)。
有谁知道我怎么能得到这个子字符串?
我遇到了剃须刀和模型的问题。MVC.net剃刀子串中的问题
在我看来,我有一个与“文章”对象列表的模型。
所以我做了一个foreach @MvcHtmlString.Create(article.Intro)
这很好。
然后,当我想要介绍的一个子:
@MvcHtmlString.Create(article.Intro).ToHtmlString().Substring(0, 50)
的页面中无限循环结束没有错误(当剃刀无法呈现的东西这经常发生)。
有谁知道我怎么能得到这个子字符串?
为什么不直接将您的文章串入?
@MvcHtmlString.Create(article.Intro.Substring(0, 50))
这可能会导致不正确的行为。如果位置49的子串开始新的表标记,那么输出将是“... blablabla
这个问题以任何方式存在; MvcHtmlString只是告诉视图引擎不要HtmlEncode字符串值 - 又名“”不变成“<范围>”。 – Tejs 2011-03-23 12:14:17
这也不起作用。我先试了一下。即使当我的所有字符串都大于20时,我也会做article.Intro.Substring(0,2)页面进入无限循环。我认为它与剃刀绑定数据的方式有关。我已经解决了另一种方式,但我想知道为什么会发生这种情况(它经常发生) – Nealv 2011-03-23 12:23:17
Substring(0, 50)
抛出ArgumentOutOfRangeException异常,如果你的任何文章的前奏是超过50个字符短。这可能是你奇怪问题的原因。
此外,使用MvcHtmlString是不正确的,因为你的数据显然不是HTML编码。
因此,一个解决办法是:
@article.Intro.Substring(0, Math.Min(article.Intro.Length, 50))
你为什么要使用_MvcHtmlString.Create_(而不只是@ article.Intro)?你的_Intro_字段已经被HTML编码了吗?如果不是,则导致XSS漏洞。如果是这样,那么你不能只使用_Substring_,因为它可能会切断像&这样的实体。 – Codo 2011-03-23 12:15:53
@ article.intro只是简单的nvarchar从数据库,我做了mvchtmlstring,因为我把它可能会解决我的子字符串问题,因为我不是直接在属性上工作,而是在本地创建的htmlstring – Nealv 2011-03-23 12:25:20