如何在MVC Razor文件中禁用或修改自动格式化?

时间:2014-12-03 19:20:47

标签: razor visual-studio-2013

我有一个应用程序,我们使用razor引擎返回XML,这是我目前正在处理的部分视图的示例:

@{   
    var includeNamespace = ViewData["includeNamespace"] != null && (bool)ViewData["includeNamespace"];
}
@if (Model != null)
{
    <Model @{if (includeNamespace){<text>xmlns="@Html.RenderNamespace()"</text>}}>
        <DateFieldOne>@Html.EncodeDate(Model.DateFieldOne)</DateFieldOne>
        <FieldTwo>@Html.Encode(Model.FieldTwo)</FieldTwo>
        @if (Model.FieldThree != null)
        {
            <FieldThreeCollection>
                @foreach (var fieldThree in Model.FieldThree)
                {
                    <FieldThree>
                        <SubFieldOne>@Html.Encode(fieldThree.SubFieldOne)</SubFieldOne>
                        <SubDateFieldTwo>@Html.EncodeDate(fieldThree.SubDateFieldTwo)</SubDateFieldTwo>
                        <SubFieldThree>@fieldThree.SubFieldThree</SubFieldThree>
                        <SubFieldFour>@fieldThree.SubFieldFour</SubFieldFour>
                    </FieldThree>
                }
            </FieldThreeCollection>
        }
        @if (Model.CanUpdate)
        {
            <link rel="Cancel" verb="POST" href="@Html.UriHelper().BuildUri("someEndpoint/{0}/cancel", Model.Id)"/>
        }
  </Model>
}

我看到的奇怪行为是当我粘贴在@{if (includeNamespace){<text>xmlns="@Html.RenderNamespace()"</text>}}部分时,visual studio重新格式化了视图并从xml元素中删除了所有大小写;一个例子:

@{
    var includeNamespace = ViewData["includeNamespace"] != null && (bool)ViewData["includeNamespace"];
}
@if (Model != null)
{
    <model @{if (includeNamespace) { <text> xmlns="@Html.RenderNamespace()" </text> }}>
        <datefieldone>@Html.EncodeDate(Model.DateFieldOne)</datefieldone>
        <fieldtwo>@Html.Encode(Model.FieldTwo)</fieldtwo>
        @if (Model.FieldThree != null)
        {
            <fieldthreecollection>
                @foreach (var fieldThree in Model.FieldThree)
                {
                    <fieldthree>
                        <subfieldone>@Html.Encode(fieldThree.SubFieldOne)</subfieldone>
                        <subdatefieldtwo>@Html.EncodeDate(fieldThree.SubDateFieldTwo)</subdatefieldtwo>
                        <subfieldthree>@fieldThree.SubFieldThree</subfieldthree>
                        <subfieldfour>@fieldThree.SubFieldFour</subfieldfour>
                    </fieldthree>
                }
            </fieldthreecollection>
        }
        @if (Model.CanUpdate)
        {
            <link rel="Cancel" verb="POST" href="@Html.UriHelper().BuildUri("someEndpoint/{0}/cancel", Model.Id)" />
        }
    </model>
}

当我输入这个问题时,我意识到它是这样做的,因为它期待html中哪些元素没有大写,所以现在记住我的问题变成:有什么方法可以阻止Razor这样做吗?

2 个答案:

答案 0 :(得分:3)

默认情况下,Visual Studio将cshtml文件格式化为html。在html中,使用小写作为标记的起始字母是标准的。要更改此行为,您必须更改所有HTML文档的设置。

在“工具”菜单上打开“选项”。然后从左侧展开“文本编辑器/ HTML /高级”。将“粘贴时格式化”设置为false。

可悲的是,我想不出任何方法可以为单个文件禁用此行为。

答案 1 :(得分:1)

帮助此操作的一个选项是右键单击解决方案中的cshtml文件,然后选择&#34;打开方式...&#34;那么&#34;源代码(文本)编辑器&#34; (先关闭文件)。

更持久的解决方法是打开&#34;选项&#34;来自&#34;工具&#34;菜单,选择&#34;文字编辑器&#34;然后&#34;文件扩展名&#34;。然后输入&#34; cshtml&#34;进入&#34;扩展&#34;框并选择&#34;脚本编辑器&#34;从列表中,然后按&#34;添加&#34;然后重新打开你的文件。

这种方法的问题是你失去了所有的智能感知能力。