如何强制隐藏字段的标记帮助器以小写形式呈现bool值

时间:2017-11-17 15:39:29

标签: c# razor asp.net-core

我有一个像这样的简单bool属性的视图模型:

public bool HasAnyProductsThatRequirePhoneNumber { get; set; }


我正在使用标记帮助程序生成一个包含此值的HiddenField,如下面的代码所示:

<input type="hidden"
       asp-for="@this.Model.HasAnyProductsThatRequirePhoneNumber" />


当呈现页面时,我获得以下HTML代码:

<input type="hidden" 
       id="HasAnyProductsThatRequirePhoneNumber" 
       name="HasAnyProductsThatRequirePhoneNumber" 
       value="True" />

如您所见,“value” - 属性已经以大写(带有大T)呈现。


有没有办法把它渲染成小写?当然我不能使用类似.ToString()。ToLower()的东西,因为你可以看到我只是手动指定asp-for属性而value-attribute被自动填充。

2 个答案:

答案 0 :(得分:3)

没有。你不能!

代码将在布尔表达式/ proprety上调用ToString方法。 ToString method内部布尔值始终返回TrueFalse

public override String ToString()
{
   if (false == m_value)
   {
       return FalseLiteral;
   }
   return TrueLiteral;
 }

其中TrueLiteralFalseLiteral是两个变量,其值为TrueFalse

internal const String TrueLiteral  = "True";
internal const String FalseLiteral = "False";

但这并不能阻止您将值呈现为truefalse。所有标记帮助程序都是,为输入呈现标记。因此,在您的情况下,您可以使用纯html替换对标记助手的调用,并手动设置输入的值。

 <input type="hidden"  
    id="HasAnyProductsThatRequirePhoneNumber"
    name="HasAnyProductsThatRequirePhoneNumber" 
   value="@Model.HasAnyProductsThatRequirePhoneNumber.ToString().ToLower()">

答案 1 :(得分:1)

添加'value'属性,然后添加.ToString()。ToLower()布尔值。 修改后的代码如下:

<input type="hidden"
   asp-for="@this.Model.HasAnyProductsThatRequirePhoneNumber" 
   value="@this.Model.HasAnyProductsThatRequirePhoneNumber.ToString().ToLower()" />