【问题标题】:How to force tag helper for hidden fields to render bool value in lower case如何强制隐藏字段的标签助手以小写形式呈现布尔值
【发布时间】:2018-05-01 10:38:49
【问题描述】:

我有一个具有简单布尔属性的视图模型,如下所示:

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。

【问题讨论】:

    标签: c# razor asp.net-core


    【解决方案1】:

    没有。你不能!

    代码将在布尔表达式/属性上调用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()">
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-07-25
        • 2021-11-14
        • 2015-07-24
        • 2019-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多