在视图的样式标记中使用Razor语法的正确语法是什么?我尝试了两种不同的方式:
<style scoped>
.test1
{
background-color: @Model.bgColor;
}
.test2
{
background-color: @(Model.bgColor);
}
</style>
这两个版本都会破坏Visual Studio 2012(版本11.0.60610.01更新3)的语法突出显示和代码缩进。
有什么想法吗?谢谢!
答案 0 :(得分:5)
试试这个:
@{
var mystyle = string.Concat("<style scoped> .test1 { background-color: ", Model.bgColor, "; } .test2 { background-color: ", Model.bgColor, "; } </style>");
}
@MvcHtmlString.Create(mystyle)
修改强>
@IngmarBobe抱歉,但我在同一版本的VS2012上使用这两个示例进行了测试并且运行正常。
<style scoped>
.test1
{
background-color: @Model.BgColor;
}
.test2
{
background-color: @(Model.BgColor);
}
</style>
和
@{
<style scoped>
.test1
{
background-color: @Model.BgColor;
}
.test2
{
background-color: @(Model.BgColor);
}
</style>
}
什么类型的数据是“BgColor”?在我的测试中,“BgColor”以这种方式定义,并且效果很好:
public string BgColor { get { return "#611546"; } }
答案 1 :(得分:1)
因为@
在CSS代码中很重要,编辑器很可能难以确定CSS或Razor上下文。
使用局部视图来防止破坏主视图的语法高亮显示。
public class StyleModel
{
public string BgColor { get; set; }
}
主视图
@model MainViewModel
@Html.Partial("BgStylePartial", new StyleModel { BgColor = Model.BgColor })
<强> BgStylePartial 强>
@model StyleModel
<style>
.test1 {
background-color: @Model.BgColor;
}
</style>
突出显示仍然被打破,但它局限于更小的局部视图。
答案 2 :(得分:1)
答案 3 :(得分:1)
保留突出显示 :(用括号括起来的值)
<style type="text/css">
.test1
{
background-color: @(Model.bgColor);
}
</style>
在Foreach中:(将foreach放置在样式标签之外)
@foreach(ColorScheme colorScheme in Model.ColorSchemes)
{
<style type="text/css">
.colorScheme_@(colorScheme.ID) { background-color:#@(colorScheme.BackgroundColor); color:#@(colorScheme.ForegroundColor); }
</style>
}
答案 4 :(得分:0)
在CSS声明的中间让@符号识别出来时遇到了麻烦。能够使用string.Format
。
<style type="text/css">
@foreach(ColorScheme colorScheme in Model.ColorSchemes)
{
@string.Format(".colorScheme_{0} {{ background-color:#{1}; color:#{2}; }}\r\n", colorScheme.ID, colorScheme.BackgroundColor, colorScheme.ForegroundColor)
}
</style>