剃刀插入文本块之间的额外空间。我想用这种方式呈现一个列表:“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