MVC,遇到此字符时将lineBreak置于<fieldset> <p>中

时间:2017-01-30 19:35:40

标签: html asp.net-mvc

在我们的数据库中,管理员决定h.postDelayed(new Runnable() { public void run() { timePassed++; timeLeft = (maxTime - timePassed) / 10; timeLeftStr = "Time left: " + timeLeft + " seconds"; timer.setText(timeLeftStr); if (timeLeft <= 0) { started = false; h.removeCallbacksAndMessages(null); setupGameOver(restartBtn, header1, header2, timer); } else { // run again. h.postDelayed(this, 100); } } }, 100); 代表换行符。

似乎很简单。

现在MVC,我有这个领域:

{

我不知道该放什么<fieldset class="my-fieldset"> <legend>Whatever</legend> <p> @StringVariable.Replace("{", "???") </p> </fieldset>

这些是我的尝试:

???

它选择了换行......

也许我应该在@之后放一些可以使事情有用的东西?

3 个答案:

答案 0 :(得分:2)

首先使用Html.Encode()对字符串进行编码,以避免潜在的html语法。然后使用<br/>标记替换占位符。然后使用Html.Raw()输出字符串,以便不再应用html转义:

<fieldset class="my-fieldset">
     <legend>Whatever</legend>
     <p> @Html.Raw(Html.Encode(StringVariable).Replace("{", "<br/>")) </p> 
</fieldset>

如果您需要在多个地方使用此功能,请编写自己的HTML帮助程序扩展方法,如下所示:

public static class HTMLExtensions
{
    public static IHtmlString ApplyNewLineReplacing(this HtmlHelper html, string text)
    {
        text = html.Encode(text);
        text = text.Replace("{", "<br/>");

        return html.Raw(text);
    }
}

然后你可以在你的视图中使用它:

<fieldset class="my-fieldset">
     <legend>Whatever</legend>
     <p> @Html.ApplyNewLineReplacing(StringVariable) </p> 
</fieldset>

答案 1 :(得分:1)

我认为您正在寻找的是:

<p>@StringVariable.Replace("{", System.Environment.NewLine)</p>

希望这会有所帮助:)

答案 2 :(得分:1)

嗯,首先我们需要明确“linebreak”的含义。您想要HTML源代码中的换行符还是渲染文档中的换行符?解析HTML时,除非包含在pre标记内或以其他方式设置为“预格式化文本”,否则将忽略空格。因此,无论如何,在浏览器的渲染中都会忽略在<p>标记之类的源中添加换行符。唯一会导致实际呈现换行符的是<br />标记。所以,最有可能的是,你正在寻找的是:

<p>@StringVariable.Replace("{", "<br />")</p>

但是,Razor会自动对HTML字符串数据进行编码以确保安全。如果您希望在被视为HTML的字符串中实际使用HTML,则需要使用Html.Raw包装它:

 <p>@Html.Raw(StringVariable.Replace("{", "<br />"))</p>