我想编写 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 字符串内容,或者生成每行包含许可证详细信息的文本文件,格式为“密钥:名称(详细信息)”,并用空格填充以进行分组。
所以,如果我理解正确的话,您想要一种用多行指定视图的方法,而最终的输出将是一行上的所有内容?
我认为这不可能开箱即用,但您可以编写自己的自定义 RazorViewEngine(派生自实际的 RazorViewEngine),它在返回视图之前修剪掉所有换行符。
您可以创建一个类似的辅助方法
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>")
请注意,实现是通用的,您可以使用任何分隔符(在本例中为空字符串)。
你尝试过吗
@helper Format(obj) {
<text>
@( obj.Title +
obj.FormatInnerData() +
obj.User != null ? obj.User.Name : ""
)
<text>
}
这是部分有用的解决方案:
@helper Format(obj) {
<text>@(obj.Title
) @(obj.FormatInnerData()
) @(obj.User != null ? obj.User.Name : "")<text>
}
即我们将 code 包装在下一行而不是内容上,因此 @() 内的换行符不会写入输出。
我想在 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>