我正在尝试创建一个换行符,并且已经在其他论坛上查看过,有些论坛正在使用"", "\r"或环境.换行符,但个人没有任何效果。我给你代码和结果:
1:
string n1 = SomeText;
string n2 = AnotherText;
string beforeStr = n1 + Environment.NewLine + n2;
阿拉伯数字:
string n1 = SomeText;
string n2 = AnotherText;
string beforeStr = n1 + 'r' + n2;
3:
string n1 = SomeText;
string n2 = AnotherText;
string beforeStr = n1 + 'n' + n2;
总是相同的结果:
SomeText AnotherText
MarkupString解决方案将吞噬/解释所有未转义的 html 字符。这可能导致使用动态用户输入字符串进行 XSS 攻击.
这里的方法是先进行 html-转义,然后将所有换行符替换为
@using System.Web
@using System.Text.RegularExpressions;
<div>
@((MarkupString)Regex.Replace(
HttpUtility.HtmlEncode(@multilineString), "r?n|r", "<br />"))
</div>
正则表达式r?n|r
将取代r (old Mac)
、rn (Windows)
和n (Unix)
这也可以作为组件实现。
MultilineString.razor
@using System.Web
@using System.Text.RegularExpressions;
@((MarkupString)Regex.Replace(HttpUtility.HtmlEncode(@Value), "r?n|r", "<br />"))
@code {
[Parameter]
public string Value { get; set; } = default!;
}
现在,它更容易与<MultilineString Value=@yourInput />
一起使用
我能想到的唯一方法是使用 Razor 模板。 \r、Envirnoment.Newline 以及其他任何内容都不能使编译器做出让步。
这是使用剃刀模板的工作解决方案:
<p>@resultString</p>
@code {
RenderFragment resultString = @<p>Series not found <br />Error message</p>;
}
更新: 你也可以使用它:
MarkupString resultString = (MarkupString) $"Series not found <br />Error message";
更新 2: 从文件中:
呈现原始 HTMLBlazor 通常使用 DOM 文本节点呈现字符串,这意味着它们可能包含的任何标记都将被忽略 并被视为文字文本。此新功能可让您渲染特殊 将解析为 HTML 或 SVG 的标记字符串值,然后 插入到 DOM 中。
警告:渲染从任何不受信任的源构造的原始 HTML 是一个 重大安全隐患!
使用 MarkupString 类型添加静态 HTML 内容块。
@((MarkupString)myMarkup)
@functions {
string myMarkup = "<p class='markup'>This is a <em>markup string</em>.</p>";
}
我创建了一个简单的组件LineBreaksToBR。它避免了MarkupString的风险。
@if (lines != null)
for (int i = 0; i < lines.Length; i++)
{
@lines[i];
<br />
}
@code {
string[] lines;
[Parameter]
public string InputString { get; set; }
protected override void OnParametersSet()
{
lines = InputString?.Split('n');
}
}
和用法
...
<div class="field">
<span>My Field</span>
<span>
<LineBreaksToBRs InputString=@Record.MyField />
</span>
</div>
...
浏览器中的文档结构将是HTML格式,因此您需要使用HTML标签(特别是<br />
)来控制文档的流程。
string beforeStr = n1 + '<br />' + n2;
正如Panagiotis Kanavos所提到的,大概是因为你使用的是Blazor,所以你可能会在.razor
组件中得到这样的东西:
<p>
@n1 <br /> @n2
</p>
这对我来说很好用
@foreach (var sub in beforeStr.Split('n'))
{
@sub <br/>
}
@code{
string n1 = SomeText;
string n2 = AnotherText;
string beforeStr = n1 + 'n' + n2;
}
CSS 有一个非常简单的解决方案:
.pre-wrap {
white-space: pre-wrap;
}
<div class="pre-wrap">@MyMultiLineString</div>
这就是我为我工作的原因。 在我的剃须刀文件中,我添加了以下内容:
@foreach (var item in References)
{
<br />
@item
}
在我的 C# 类中,我添加了以下内容:
protected List<string> References { get; set; } = new List<string>();
只需用您蚂蚁的每一行文本填写参考,它就会很好地工作。 我找到了很多其他解决方案,但这对我来说是最简单的。
我不太擅长html,这就是我用来创建新行的方法。可能有更好的方法,但这对我有用:
<div style="display:inline;"> one line</div>
空行的另一种方法是:
<div style="height:1em;"></div>