Blazor 应用程序 Razor 页面的 InputText 中的绑定类型双精度值

Binding Type double values in InputText of Blazor app Razor page

我对几乎所有属性都使用 InputText。某些属性的类型为 Double。当我在 InputText 中绑定双精度值时,它给我错误。我该如何解决这个问题?我不想使用 InputNumber。

 <div class="form-group col">
 <label title="The quantity ">Quantity</label>
 <i class="fa fa-info-circle" style="color:dimgrey" title="The quantity"> 
 </i>
 <InputText @bind-Value="@trade.qty" class="form-control" />
 <ValidationMessage For="@(() => trade.qty)" />
 </div>

我在 <InputText @bind-Value="@trade.qty" class="form-control" /> 中的 @trade.qty 处收到错误 作为它的双精度值。

型号:

 public Double qty { get; set; }

我试过 <InputText @bind-Value="@trade.qty.ToString()" class="form-control" /> 没用。

我不确定您为什么需要该功能,但是如何创建支持字符串 属性 并转换其中的数字呢?

class MyModel
{
    public Double qty { get; set; }
    public string qtyString{
      get=>qty.ToString();
      set{
        if(Double.TryParse(value, out double val))
        qty = val;
         }
      }
}
<InputText @bind-Value="@mod.qtyString"/>

Working solution.

使用

<InputNumber @bind-Value=trade.qty min="1" max="999" />

可以绑定到double。

https://docs.microsoft.com/fr-fr/aspnet/core/blazor/forms-validation?view=aspnetcore-5.0

我认为墨卡托的@Alanmakanambra 和@Guy 的回答都可以标记为正确,因为他们回答了问题。但我认为添加额外的评论是值得的。

HTML 输入在不同浏览器中的处理方式不同。特别是在 phone 浏览器中,数字输入很可能会弹出一个内置控件(如小键盘)。 Blazor 控件呈现为 <input type="number">,每个浏览器都会显示其数字输入版本。

如果您制作自定义控件(例如使用文本输入来处理数字输入),那么您将绕过不同设备处理数字输入的本机方法。在 hand phones 的情况下,这使得用户很难(或几乎不可能)轻松输入数字信息。

有时您想绕过本机系统。也许您有一个自定义日历,并且您不希望 Apple 内置到 iPhone 的任何日期选择器破坏您网站的外观。但一般来说,你不应该那样做。

短版:使用<input type="number><InputNumber>

我这样做是为了浮动:

<input type="number" pattern="/^-?\d+\?\d*$/" readonly="@isReadOnly" onKeyPress="if(this.value.length==8) return false;" 
style="background-color:transparent; border:none; padding: 3px; width: 4em" 
value="@cellvalue.ToString(new System.Globalization.CultureInfo("en-US")).Replace(",",".")" 
@onchange="@((ChangeEventArgs __e) => row.SetField<float>(col, float.Parse(__e.Value.ToString().Replace(",",".")) )" size="8" step=0.01 max="9999" id="number" />

所以我使用输入类型,但我有一个额外的问题,我的本地数字文化使用逗号,我用 onchange 和值替换了它,而不是直接绑定值。效果出奇地好,它甚至保留了逗号,但我可以在字段中手动输入它,也可以使用句点。 请注意,我这里的数据在 C# DataTable 中,这就是为什么 onchange 看起来像它的样子,如果你有一个常规的双精度引用,它会简单得多。

另一个优点是它向其中添加了一些数字内容,因此步骤是您按元素上的向上或向下箭头,以及要从该值中添加或减去多少。