我想编写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>
即。只有内容标记之间的部分才会进入输出流。当然可能是一个更简单的语法,比如@:而不是&lt; text&gt;。
一个示例用例是生成带有标记的JavaScript字符串内容,或者生成带有许可证详细信息的文本文件,格式为“Key:Name(details)”,每行填充空格以进行分组。
答案 0 :(得分:1)
因此,如果我理解正确,您想要一种方法来指定多行的视图,而最终输出将是一行中的所有内容?
我认为这不是开箱即用的,但您可以编写自己的Custom RazorViewEngine(从实际的RazorViewEngine派生),它会在返回视图之前修剪所有换行符。
答案 1 :(得分: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>")
请注意,实现是通用的,您可以使用任何分隔符(在本例中为空字符串)。
答案 2 :(得分:0)
你试过吗
@helper Format(obj) {
<text>
@( obj.Title +
obj.FormatInnerData() +
obj.User != null ? obj.User.Name : ""
)
<text>
}
答案 3 :(得分:0)
这是部分有用的解决方案:
@helper Format(obj) {
<text>@(obj.Title
) @(obj.FormatInnerData()
) @(obj.User != null ? obj.User.Name : "")<text>
}
即。我们在下一行包含代码而不是内容,因此@()中的换行不会写入输出。