【问题标题】:Blazor, fill 0 value binded property as empty string in inputBlazor,将 0 值绑定属性填充为输入中的空字符串
【发布时间】:2021-08-28 05:04:33
【问题描述】:

您好,我有一个问题,

所以我正在尝试使用 blazor,它很有趣,但我想知道何时绑定一个简单的模型,例如将一个 int 属性绑定到文本输入:

<input type="text" class="communication__control--input" id="broadcast-port" autocomplete="off" placeholder=" " @bind="@this.Simple.Number" />

现在模型中的属性只是 int(不可为空),因此该输入的默认值为 0。所以我的问题是我是否可以让 0 在输入中显示为空字符串,并且如果我写入任何值(例如 3 将显示为 3,但 0 将显示空字符串),它将绑定到它?

基于@Bennyboy1973 评论,基本上我可以使用 2 个属性,一个将绑定字符串 prop,另一个将是只读 int,它将尝试转换第一个,或者只使用 2 个模型组合(例如 DTO 和后端模型) 与自动映射器。但是有没有更简单的方法呢?

【问题讨论】:

  • 我不建议你做任何你现在展示的事情。 @bind 用于双向绑定,这意味着对字符串的更改将在输入中更新,反之亦然。这需要匹配的数据类型。

标签: c# blazor


【解决方案1】:

如果你真的想这样做,那么这行得通:

    <input type="text" @bind-value="model.Value" />

@code {

    public class Model
    {
        public string Email { get; set; }

        public string Value
        {
            get => _value != 0 ? _value.ToString() : string.Empty;
            set
            {
                if (int.TryParse(value, out int pvalue))
                    _value = pvalue;
                else
                    _value = 0;
            }
        }

        private int _value;
    }

我可以预见到在验证和编辑状态管理方面存在更高级情况的一两个问题,因此我可能会编写 Blazor InputText 的自定义版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-04
    • 2013-10-07
    • 1970-01-01
    • 2016-10-23
    • 2012-01-27
    • 2012-01-30
    • 1970-01-01
    • 2021-07-06
    相关资源
    最近更新 更多