剃刀插入文本塊之間的額外空間。我想用這種方式呈現一個列表:「1,2,3」,但得到「1,2,3」。asp.net mvc剃鬚刀額外空間
@for (int i = 1; i < 3; i++)
{
<text>@i</text>
if (i != 2)
{
<text>, </text>
}
}
有沒有什麼方法可以去除這個額外的空間?
剃刀插入文本塊之間的額外空間。我想用這種方式呈現一個列表:「1,2,3」,但得到「1,2,3」。asp.net mvc剃鬚刀額外空間
@for (int i = 1; i < 3; i++)
{
<text>@i</text>
if (i != 2)
{
<text>, </text>
}
}
有沒有什麼方法可以去除這個額外的空間?
您可以使用@ Html.Raw。代碼是更具可讀性和輸出沒有多餘空格
@for (int i = 1; i < 3; i++)
{
@Html.Raw(i)
if (i != 2)
{
@Html.Raw(", ")
}
}
我相信在ASP.NET Razor RC中存在一個問題,不幸的是,它將把「代碼上下文」中的空白視爲寫入響應的文字空白空間。
上面的例子是通過去除碼塊內的空白「固定」:
@for (int i = 1; i < 3; i++)
{
<text>@i</text>if (i != 2)
{
<text>, </text>
}
}
或者更整潔:
@for (int i = 1; i < 3; i++)
{
<text>@i</text>if(i != 2){<text>, </text>}
}
通過遵循該thread on the asp.net站點有其具有的討論類似的問題和安德魯護士的迴應
此錯誤已記錄,將 考慮用於RTM。
所以如果這是同樣的問題,希望它使列表被修復。
這個錯誤並沒有使RTM
我可能會寫這樣一個自定義的助手:
public static MvcHtmlString RenderNumbers(this HtmlHelper htmlHelper, int count)
{
var text = string.Join(", ", Enumerable.Range(1, count).ToArray());
return MvcHtmlString.Create(text);
}
,然後在我看來,使用它:
@Html.RenderNumbers(3);
由於這仍然是MVC 3 RTM +工具更新中的<text>
標記的問題,因此它可以是b e真正令人頭疼的是,eddiegroves將代碼格式中的空格刪除的方法的替代方法是避免使用<text>
標籤。
首先,這裏是能重現問題的原代碼的重寫和實際打印「1,2,3」:
@for (int i = 1; i <= 3; i++) {
@i
if (i < 3) {
<text>, </text>
}
}
這裏有四種選擇打印「1,2,3」,而不是的「1,2,3」,但通過使用@something而不是<text>
保留代碼格式。
溶液#1:使用@( 「」)
@for (int i = 1; i <= 3; i++) {
@i
if (i < 3) {
@(", ")
}
}
溶液#2:使用@var
@for (int i = 1; i <= 3; i++) {
var s = i < 3 ? ", " : null;
@i @s
}
溶液#3:使用@(表達式)
@for (int i = 1; i <= 3; i++) {
@i @(i < 3 ? ", " : null)
}
解決方案#4:使用@helpers
@helper Item(int index) {
@index
}
@helper Separator(int index, int count) {
if (index < count) {
@(", ")
}
}
@for (int i = 1; i <= 3; i++) {
@Item(i) @Separator(i, 3)
}
對於這個例子來說,最後一個顯然是矯枉過正的,但對於更復雜的項目和分隔符可能是一個有用的模式。
下列任何一項應該工作,這取決於您的價值觀實際上是從哪裏來的:
@string.Join(", ", myList)
@string.Join(", ", 1, 2, 3)
@string.Join(", ", Enumerable.Range(1, 3))
我想刪除所有在一些研究後,我的解決方案如下,在HTML中額外的空間。
@for (int i = 1; i < 3; i++)
{
{<text>@i</text>}
if (i != 2)
{
{<text>, </text>}
}
}
包住<文本>或<標籤> {}中,
可以在輔助函數使用,並將其與「格式文檔」功能很好地工作。
請確認您輸入的代碼塊,如果不換爲@ {}
代碼的某些元素(HTML,頭部,身體),你需要{<標籤> @ {} @ ** @ </tag>}
防止使用「格式文檔」功能後的換行添加。
@{
{<!DOCTYPE html>}
{<html>@{
{<head>@{
{<link .../>}
}@**@</head>}
{<body>@{
{<div>@{
{<hr/>}
}</div>}
}@**@</body>}
}@**@</html>}
}
@model object
@{
// init
}@{
}@section MainSection {@{
{<div>@{
{<hr/>}
{@Html.Partial("abc")}
Html.RenderPartial("abc");
if ("razor" == "good")
{
for (var i = 1; i <= 10; i++)
{
Write("(");
{@i}
Write(" ");
{@<text>)</text>}
}
}
}</div>}
}}
希望它有幫助。
Html.Raw在幫助器中不起作用,因爲這可以看到下面的答案。 – Case 2012-07-24 19:48:08
@Case提到的答案可能是[Chris Toman的答案]的解決方案#4(http://stackoverflow.com/a/7237191/2615878)。 – Theophilus 2015-01-05 14:58:16