为啥 <input type="hidden"> 不能接受来自服务器端的布尔值?

Posted

技术标签:

【中文标题】为啥 <input type="hidden"> 不能接受来自服务器端的布尔值?【英文标题】:Why cannot <input type="hidden"> accept a boolean value from server side?为什么 <input type="hidden"> 不能接受来自服务器端的布尔值? 【发布时间】:2016-02-16 11:49:53 【问题描述】:

在服务器端,我定义了一个新的布尔值并将其设置为&lt;input&gt;标签,但浏览器无法检测到它。

@ var isAuthor = false; 
<input type="hidden" value="@isAuthor" />

编译后结果为:&lt;input type="hidden"&gt;&lt;/input&gt;

但是,当我尝试将 isAuthor 转换为 string 时,它应该可以工作:

@ var isAuthor = false; 
<input type="hidden" value="@isAuthor.ToString()" />

结果:&lt;input type="hidden" value="false"&gt;&lt;/input&gt;

为什么?我错过了什么吗?

【问题讨论】:

你错过了什么 - 没有。这正是剃须刀引擎的工作方式。如果一个属性的值为nullfalse,它不会被渲染 - 如果你添加了name="@isAuthor" 它也不会被渲染 你也可以使用@html.Hidden(),如果为false则不会隐藏值。 【参考方案1】:

这是一个称为条件属性的 Razor 视图引擎功能。这个想法是为了简化场景,您希望或不希望根据值呈现属性。以前您必须编写if 语句或使用三元运算符来处理它,但使用条件属性这一切都大大简化了。

使用条件属性,如果属性的值为nullfalse,则不会呈现该属性。如果您希望值为false,则需要将其转换为字符串,就像您在问题中所做的那样。

您可以在blog article 中阅读有关条件 Razor 属性的精彩介绍

【讨论】:

谢谢。这很有帮助:)

以上是关于为啥 <input type="hidden"> 不能接受来自服务器端的布尔值?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 <input type="hidden"> 不能接受来自服务器端的布尔值?

为啥 <input type="number" maxlength="3"> 在 Safari 中不起作用?

为啥 <input type="number" maxlength="3"> 在 Safari 中不起作用?

<input type="number"> 在 Firefox 中。为啥 Mozilla 不支持在其浏览器中输入数字?

为啥 `input type="date"` 的行为发生了变化?

在css中,属性选择器前面为啥要加标签,比如 input[type="submit"]