MVC Html数据属性呈现差异

Tim*_*mes 5 c# asp.net asp.net-mvc asp.net-mvc-4

我遇到了一个非常奇怪的问题,我无法找到原因.

在我的Asp.Net MVC应用程序(.net4.0/MVC4)中,我在一些html元素中重新出现html数据属性,然后在JavaScript中使用.

所以在应用程序中我有一个模型,例如

public class MyModel{
    public bool MyFlag { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我将这个模型传递到一个简单的MVC视图页面,并将布尔值渲染到html数据属性中,例如

@model MyProject.MyModel

<a href="#" data-is-flagged="@Model.MyFlag">Click Me</a>
Run Code Online (Sandbox Code Playgroud)

现在,在本地运行项目时,html呈现为:

<a href="#" data-is-flagged="True">Click Me</a>
Run Code Online (Sandbox Code Playgroud)

但是,当在服务器上运行时,html呈现为:

<a href="#" data-is-flagged="data-is-flagged">Click Me</a>
Run Code Online (Sandbox Code Playgroud)

起初我认为布尔值可能不是以某种方式设置的,所以我将它添加到Click Me @Model.MyFlag呈现为的元素中Click Me True.现在我怀疑这可能与Debug vs Release模式有关,但是在玩这个之后它没有任何区别.

我对此的修复是更改代码以将布尔值输出为字符串值,例如data-is-flagged="@Model.MyFlag.ToString()",然后在本地和服务器上呈现相同的值.

有什么想法是什么原因造成的?

zed*_*zed 3

我引用另一个网站的答案:

这是网页 2 (MVC 4) 中引入的条件属性的结果: http://www.mikesdotnetting.com/Article/201/Cleaner-Conditional-HTML-Attributes-In-Razor-Web-Pages
两个选项:恢复到网页 1 (MVC 3) 或编辑所有受影响的文件。

如果应用于属性的值为,结果是该属性被重复(这对于实例内的true标签很有用)。如果设置的值为,则不会呈现任何内容(不是事件属性名称)。optionselectfalse

因此,正如 @Jamie 和 @Peter 的评论,您的开发环境中可能有不同版本的 Razor 引擎。