我有一个应用程序,其中我们使用剃刀引擎返回XML,这是我当前正在处理的部分 View 的示例:
@{
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重新格式化了 View 并从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执行此操作?
最佳答案
默认情况下,Visual Studio将cshtml文件格式设置为html。在html中,标记的起始字母通常使用小写字母。为了更改此行为,您必须更改所有HTML文档的设置。
在“工具”菜单上,打开“选项”。然后从左侧展开“文本编辑器/ HTML /高级”。将“粘贴时设置格式”设置为false。
可悲的是,我想不出任何方法来禁用单个文件的此行为。
关于razor - 如何禁用或修改MVC Razor文件中的自动格式设置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27279915/