MVC Html数据属性呈现差异

时间:2015-08-13 14:46:15

标签: 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; }
}

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

@model MyProject.MyModel

<a href="#" data-is-flagged="@Model.MyFlag">Click Me</a>

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

<a href="#" data-is-flagged="True">Click Me</a>

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

<a href="#" data-is-flagged="data-is-flagged">Click Me</a>

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

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

任何想法是什么原因造成的?

1 个答案:

答案 0 :(得分:3)

我引用another website的答案:

  

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

如果应用于属性的值为true,则结果是重复该属性(例如,这对option内的标记select很有用。如果值集为false,则不呈现任何内容(不是事件属性名称)。

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