[英]asp.net mvc razor extra space
Razor在文本块之间插入额外的空间。 我想以这种方式呈现一个列表:“1,2,3”但得到“1,2,3”。
@for (int i = 1; i < 3; i++)
{
<text>@i</text>
if (i != 2)
{
<text>, </text>
}
}
有没有办法删除这个额外的空间?
由于MVC 3 RTM +工具更新中的<text>
标签仍然存在问题,并且处理起来非常麻烦,因此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)
}
对于该示例而言,最后一个显然是过度的,但对于更复杂的项和分隔符可能是有用的模式。
你可以使用@ 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>}
}
通过在asp.net网站上关注这个帖子,有一个讨论有类似的问题,Andrew Nurse回应
此错误已被记录,将被考虑用于RTM。
因此,如果这是同一个问题,希望它能够修复列表。
这个bug没有成为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);
以下任何一项都应该有效,具体取决于您的值实际来自何处:
@string.Join(", ", myList)
@string.Join(", ", 1, 2, 3)
@string.Join(", ", Enumerable.Range(1, 3))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.