2011-03-23 49 views
0

我遇到了剃鬚刀和模型的問題。MVC.net剃刀子串中的問題

在我看來,我有一個與「文章」對象列表的模型。

所以我做了一個foreach @MvcHtmlString.Create(article.Intro)這很好。

然後,當我想要介紹的一個子:

@MvcHtmlString.Create(article.Intro).ToHtmlString().Substring(0, 50)的頁面中無限循環結束沒有錯誤(當剃刀無法呈現的東西這經常發生)。

有誰知道我怎麼能得到這個子字符串?

+1

你爲什麼要使用_MvcHtmlString.Create_(而不只是@ article.Intro)?你的_Intro_字段已經被HTML編碼了嗎?如果不是,則導致XSS漏洞。如果是這樣,那麼你不能只使用_Substring_,因爲它可能會切斷像&這樣的實體。 – Codo 2011-03-23 12:15:53

+0

@ article.intro只是簡單的nvarchar從數據庫,我做了mvchtmlstring,因爲我把它可能會解決我的子字符串問題,因爲我不是直接在屬性上工作,而是在本地創建的htmlstring – Nealv 2011-03-23 12:25:20

回答

4

爲什麼不直接將您的文章串入?

@MvcHtmlString.Create(article.Intro.Substring(0, 50)) 
+0

這可能會導致不正確的行爲。如果位置49的子串開始新的表標記,那麼輸出將是「... blablabla Polity 2011-03-23 12:11:37

+0

這個問題以任何方式存在; MvcHtmlString只是告訴視圖引擎不要HtmlEncode字符串值 - 又名「」不變成「<範圍>」。 – Tejs 2011-03-23 12:14:17

+0

這也不起作用。我先試了一下。即使當我的所有字符串都大於20時,我也會做article.Intro.Substring(0,2)頁面進入無限循環。我認爲它與剃刀綁定數據的方式有關。我已經解決了另一種方式,但我想知道爲什麼會發生這種情況(它經常發生) – Nealv 2011-03-23 12:23:17

4

Substring(0, 50)拋出ArgumentOutOfRangeException異常,如果你的任何文章的前奏是超過50個字符短。這可能是你奇怪問題的原因。

此外,使用MvcHtmlString是不正確的,因爲你的數據顯然不是HTML編碼。

因此,一個解決辦法是:

@article.Intro.Substring(0, Math.Min(article.Intro.Length, 50)) 
+0

這不是一個ArgumentOutOfRangeException錯誤,我所有的字符串都很好。這個問題經常發生在剃刀上。當剃刀有一個問題,而渲染它只是沒有返回任何頭,甚至沒有asp.net錯誤頁面,所以頁面似乎繼續渲染。該字符串是html。 – Nealv 2011-03-24 09:45:35

+0

我認爲它與模型中的屬性鏈接到datacontext並像動態一樣處理有關。當剃鬚刀執行它的視圖渲染時,它不能將動態屬性傳遞給該函數,並且它會崩潰。但我不確定 – Nealv 2011-03-24 09:47:03