2016-06-10 44 views
-2

任何一個可以告訴我,爲什麼這段代碼在Firefox的作​​品沒有問題,但在鉻我得到一個爲什麼在Firefox,而不是這個@ Html.Raw()使用的Chrome

System.StackOverflowException」發生在System.Web.dll中。

<div id="tabs-1"> 
    @if (ViewBag.Raw != null) 
    { 
     @Html.Raw(ViewBag.Raw) 
    } 
</div> 

我從數據庫中這樣

var querys = item.Database.SqlQuery<stuffID>("select Text from stuffFiles where [email protected]", new SqlParameter("@stuffID", id)); 

獲取數據,我走的是文字,我需要這樣的

foreach (var items in querys) 
{ 
    paths = items.Text; 
} 
ViewBag.Raw = paths; 

我不明白爲什麼它不」在Chrome中工作。

+4

什麼是堆棧跟蹤?瀏覽器*真的*不應該在服務器端代碼中有所作爲。我高度懷疑別的是錯的。 – David

+0

當我做了一個調用堆棧它說超過了Visual Studio支持的最大堆棧幀數。 – user6295447

+1

StackOverflowException通常是由無限遞歸造成的。簡單地說,每次你做一些事情就像創建一個變量,調用一個方法等一樣,你將一個項目添加到堆棧中(一段內存)。它有一個有限的限制,當你觸及時,繁榮。然而,在這個年代的今天,使用普通代碼來添加足夠的內存幾乎是不可能的,這就是爲什麼它通常是無限遞歸的結果。總而言之,它與瀏覽器無關。如果它在Firefox中工作,Firefox必須運行緩存或其他東西。 –

回答

0

我manged得到它與這段代碼

@Html.Raw(HttpUtility.HtmlDecode(ViewBag.Raw)) 

工作從我的理解@ Html.Raw呈現未編碼的HTML,因此需要首先被解碼。

0

也許你的代碼正在做它不應該做的事情。

您的意思是Concat的從text所有items你得到querys

下面將只考慮最後 item文本和所有以前的將被覆蓋

foreach (var items in querys) 
{ 
    paths = items.Text; //try to replace this with the line below 
    //paths = paths + items.Text + "," ; 
} 
ViewBag.Raw = paths; 

你的代碼除非你知道你在做什麼,否則建議不要使用Html.Raw。每個人都應該使用HttpServerUtility.HtmlEncode代替

+0

我試過但沒有工作。使用Html.Raw在Firefox中工作,並應在Chrome中工作 – user6295447

+0

這是出現的錯誤。符號加載跳過。符號加載優化模塊System.Web.dll被跳過,因爲只是我的代碼被啓用。 – user6295447

+0

這不是一個錯誤。這是來自Visual Studio的警告,關於無法加載所有符號以進行調試。它只會影響您在調試時進入代碼的能力。這不是您的應用程序中的實際錯誤。 –

相關問題