Razor 生成单行文本

问题描述 投票:0回答:5

我想编写 Razor 视图助手来生成单行内容:

@helper Format(obj) {
   <text>
       @obj.Title
       @obj.FormatInnerData() (obj.User != null)
       {
          @obj.User.Name
       }
   <text>
}

但我当然明白

Title
Inner Data
User Name

目前我要做的事

<text>@obj.Title @obj.FormatInnerData() @(obj.User != null ? obj.User.Name : "")</text>

将文本输出生成为不带换行符的单行,但这对于许多属性来说可能会变得很长/不可读。

也就是说,如何更方便地使用 Razor 生成文本内容,而不是标记内容?

UPD:理想情况下是这样的

   <content>@obj.Title</content>
   <content>@obj.Format()
 @obj.User.Name</content>

即只有内容标签之间的部分才会进入输出流。当然也许有更简单的语法,比如 @: 而不是

一个示例用例是生成内部带有标记的 JavaScript 字符串内容,或者生成每行包含许可证详细信息的文本文件,格式为“密钥:名称(详细信息)”,并用空格填充以进行分组。

asp.net-mvc-3 razor
5个回答
1
投票

所以,如果我理解正确的话,您想要一种用多行指定视图的方法,而最终的输出将是一行上的所有内容?

我认为这不可能开箱即用,但您可以编写自己的自定义 RazorViewEngine(派生自实际的 RazorViewEngine),它在返回视图之前修剪掉所有换行符。


1
投票

您可以创建一个类似的辅助方法

public class MyHelper
{
    public static string JoinedString(string delimiter, params object[] parameters)
    {
        return string.Join(delimiter, parameters);
    }
}

然后在 Razor 视图中将其称为

MyHelper.JoinedString("", 
         "<text>", 
         @obj.Title, 
         obj.User == null ? "" : obj.User.Name
         "</text>")

请注意,实现是通用的,您可以使用任何分隔符(在本例中为空字符串)。


0
投票

你尝试过吗

@helper Format(obj) {
   <text>
       @( obj.Title + 
          obj.FormatInnerData() + 
         obj.User != null ? obj.User.Name : ""
        )
   <text>
}

0
投票

这是部分有用的解决方案:

@helper Format(obj) {
   <text>@(obj.Title
     ) @(obj.FormatInnerData()
     ) @(obj.User != null ? obj.User.Name : "")<text>
}

即我们将 code 包装在下一行而不是内容上,因此 @() 内的换行符不会写入输出。


0
投票

我想在 Razor 编辑页面添加一行文本。解决办法是用div来拥抱文字。

<div>
@{
    if (Model.Firmware.ExternalDbc != null)
    {
        <a> | </a>
        @Html.DisplayFor(model => model.Firmware.ExternalDbc.Name)
        <a> | </a>
        <a asp-page="../Dbcs/Details" asp-route-id="@Model.Firmware.ExternalDbcId">Details</a>
    }
}
</div>
© www.soinside.com 2019 - 2024. All rights reserved.