2011-08-02 72 views
1

我只是不明白,爲什麼輸出不正確顯示如何刪除換行符

這裏是我的視圖代碼

@model IEnumerable<TheSite.Post> 
@{ 
    ViewBag.Title = "Index"; 
    Layout = null; 
} 
document.write('<table> 

@foreach (var p in Model) 
{ 
    <tr> 
     <td> 
      <a href="@p.Url">@p.Title</a> 
     </td> 
    </tr> 
} 

</table>'); 

這裏是輸出:

document.write('<table> 

    <tr> 
     <td> 
      <a href="http://www.test.com">test</a> 
     </td> 
    </tr> 

</table>'); 

這裏我需要的輸出:

document.write('<table><tr><td><a href="http://www.test.com">test</a></td></tr></table>'); 

我嘗試使用stringbuilder,但輸出被轉義。

回答

1

建立它與StringBuilder及用途:

@Html.Raw(builder.ToString()) 

Html.Raw on MSDN

+0

最後我用你的代碼,替換所有換行符。Thnaks – Luke101

2

視圖引擎保留的換行符和空格創建HTML清晰。

我不明白爲什麼你希望他們被自動的刪除,但簡單的想法是不將它們插入擺在首位:

document.write('<table> @foreach (var p in Model){<tr><td> ... }</table>'); 

現在,這大概不能編譯,只是一個基本的想法。
它應該編譯。只是一個醜陋的佈局。

0

亨克在評論正確的想法,剛投入的字符串作爲你想要它。

除非,你可以嘗試使用更換。

document.write(mystring.Replace("\n",""); 
0

您可以使用StringBuilder與@Html.Raw()避免的HTML字符轉義。 你可以在每個html行上追加「\」字符以在js中轉義新行,但我不會建議這樣做。相反,我會用「+」

document.write('<table>' + 
@foreach (var m in Model) { 
    '<tr><td>@m</td></tr>' 
} 
+ '</table>'); 

或者你可以寫一個輔助方法將返回IHtmlString的實例(類似return new HtmlString(yourStringBuilder.ToString());

+0

只是一個供參考,Html.Raw並創造IHtmlString的一個實例。創建它自己是沒有必要的(你不要NE編輯MvcHtmlString作爲MVC 3 ...新的HtmlString(yourStringBuilder.ToString());會工作得很好(但同樣,這就是Html.Raw爲你做的。 –

+0

謝謝,但我並沒有說他可以在他的helper方法就可以了。在他看來返回IHtmlString,然後調用Html.Raw。它止跌「噸甚至編制。他可以創建HtmlHelper.Raw或新HtmlString()的IHtmlString。我覺得Html.Raw方法本身創建一個新的HtmlString() – Vasea