【问题标题】:Keep correct HTML syntax highlighting in <script> "text/html" templates在 <script> "text/html" 模板中保持正确的 HTML 语法高亮
【发布时间】:2013-01-21 23:55:28
【问题描述】:

有没有办法在 Razor 视图中的 JavaScript HTML 模板中保留 HTML/ASP.net 语法突出显示和代码完成?

为了帮助突出显示(双关语)问题,请参阅此问题图片:

编辑:这个问题与 Visual Studio 2010 有关。

【问题讨论】:

标签: asp.net-mvc-3 visual-studio-2010 visual-studio razor


【解决方案1】:

为其创建一个助手,如Syntax highlighting for script tags with html templates in Visual Studio 2010 MVC3 applications所示。

从那里获取代码,这里是该链接的基本内容。

首先,将一些代码添加到您的HtmlHelperExtensions

public static class HtmlHelperExtensions
{
    public static ScriptTag BeginHtmlTemplate(this HtmlHelper helper, string id)
    {
        return new ScriptTag(helper, "text/html", id);
    }
}

public class ScriptTag : IDisposable
{
    private readonly TextWriter writer;

    private readonly TagBuilder builder;

    public ScriptTag(HtmlHelper helper, string type, string id)
    {
        this.writer = helper.ViewContext.Writer;
        this.builder = new TagBuilder("script");
        this.builder.MergeAttribute("type", type);
        this.builder.MergeAttribute("id", id);
        writer.WriteLine(this.builder.ToString(TagRenderMode.StartTag));
    }

    public void Dispose()
    {
        writer.WriteLine(this.builder.ToString(TagRenderMode.EndTag));
    }
}

现在您可以像 Html.BeginForm() 一样使用它:

@using (Html.BeginHtmlTemplate("person-template"))
{
    <h3>Heading</h3>
    <p>Credits: <span></span></p>
}

瞧!通过在 Visual Studio 中隐藏相关部分来突出显示语法。

【讨论】:

  • 注意:如果您到达这里并想知道发生了什么,我最初发布了链接作为答案。我的回答被版主删除了,他把我指向了这个链接:meta.stackexchange.com/q/8259(因为我的回答只是一个链接),我的回答变成了评论。顺便说一句,如果你去那个链接,你会看到 Jon Skeet 输掉了一场辩论! :)
  • 感谢安东尼的澄清!
  • 没问题!我很高兴你问了你的问题,因为这件事困扰了我一段时间。而且我认为对于语法突出显示失败的其他情况,这可能是一个很好的通用解决方案。
  • 不幸的是,这在“纯 HTML”文件中不起作用,就像我在 Knockout 中使用的那样:(
  • 如果它在 ASP.NET MVC 项目中,您可以使用 .cshtml 来输出它。注意:您可以使用 .cshtml 输出任何内容:HTML、CSS(不能集成 Less 或 Sass?使用 .cshtml :))、JavaScript 等。给它一个路由,它不是“动态”也没关系.
【解决方案2】:

这是 WebForms 的 "same" solution(通过 here

(即使问题引用了 MVC/Razor,我还是来这里寻找 WebForms)

助手

在你的代码隐藏.aspx.cs

public string ClientTemplateBegin(string attrId, string attrType = "text/html")
{
    return string.Format(@"<script type=""{0}"" id=""{1}"">", attrType, attrId);
}

public string ClientTemplateEnd()
{
    return "</script>";
}

用法

在您的.aspx 文件中:

<%= ClientTemplateBegin("scriptId", "text/ractive") %>
    <strong>Some Editor</strong>

    {{#each items}}
        Hello {{name}}!  Your age is {{age}}.
    {{/each}}

    <pre>
    {{ json(items) }}
    </pre>
<%= ClientTemplateEnd() %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2013-07-10
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    相关资源
    最近更新 更多