【发布时间】:2020-10-25 09:51:15
【问题描述】:
我正在 Blazor 中创建一个简单的自定义货币组件。我继承自InputBase<string> 并实现bool TryParseValueFromString(string value, out TValue result, out string validationErrorMessage)
问题是我想在TryParseValueFromString 不成功时返回值。
父组件
<div class="form-group mb-3">
<label for="MyInputTextArea">Input currency</label>
<InputCurrency @bind-Value=FormData.SomeStringCurrency id="MyInputTextArea" class="form-control"/>
<ValidationMessage For="() => FormData.SomeStringCurrency"></ValidationMessage>
</div>
自定义组件
@using System.Globalization
@inherits InputBase<string>
<input type="string" @attributes=AdditionalAttributes class=@CssClass @bind=CurrentValueAsString />
@code{
private CultureInfo _culture = CultureInfo.CreateSpecificCulture("de");
protected override string FormatValueAsString(string value)
{
if (string.IsNullOrWhiteSpace(value))
{
return string.Empty;
}
if (Decimal.TryParse(value, NumberStyles.Currency, _culture, out decimal result))
{
return Convert.ToDecimal(value).ToString("N", _culture);
}
else
{
return value;
}
}
protected override bool TryParseValueFromString(string value, out string result, out string validationErrorMessage)
{
try
{
var decimalValue = ReturnDecimalIfSuccessFul(value);
result = decimalValue.ToString();
validationErrorMessage = null;
return true;
}
catch
{
validationErrorMessage = "Not a valid currency value.";
result = value; // here i am assigning the value but it's not returned
return false;
}
}
private decimal? ReturnDecimalIfSuccessFul(string value)
{
if (string.IsNullOrWhiteSpace(value))
{
return null;
}
var result = Decimal.Parse(value, NumberStyles.Currency, _culture);
return result;
}
当值未成功解析时,不会向用户显示。仅显示最后一个成功的值,但我希望始终让用户输入的值...
【问题讨论】:
标签: blazor