如何将输入的值传递给 blazor webassembly 中的另一个输入?
How to pass the value of an input to another input in blazor webassembly?
你好社区我正在处理一个带有十进制数量的表格,我想在其中输入一个数量并将相同的数量传递给另一个输入,问题是[=中的第一个输入12=] 有 cost
属性 和第二个 sale_price
,我也希望在输入中写入数量时更改值,所以我进行了自定义输入,但我无法使绑定正常工作以将成本值传递给 sale_price 值
这是我的表格:
<EditForm Model="Producto" OnValidSubmit="OnDataAnnonationsValidated">
<div class="col-sm-4">
<div class="form-group">
<InputLabel for="costo">Costo</InputLabel>
<CampoNumeroOnInput id="costo" Placeholder="Costo" @bind-Value="Producto.Costo" />
<p>Value: @Producto.Costo</p>
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<InputLabel for="margen">Margen de Ganancia</InputLabel>
<InputNumber @bind-Value="@Producto.Margen_de_Ganancia" />
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<InputLabel for="precioventa">Precio de Venta</InputLabel>
<InputNumber @bind-Value="@Producto.Precio_de_Venta" />
</div>
</div>
<EditForm />
@code {
[Parameter] public Producto Producto { get; set; }
[Parameter] public EventCallback OnValidSubmit { get; set; }
}
输入数字自定义:
[![@typeparam T
@inherits InputNumber<T>
<input @attributes="AdditionalAttributes"
type="number"
class="form-control form-control-sm"
value="@stringValue"
placeholder="@Placeholder"
@oninput="OnInput"
@onblur="OnBlur" />
@code {
\[Parameter\] public string Placeholder { get; set; }
private string stringValue;
private T lastParsedValue;
protected override void OnParametersSet()
{
// Only overwrite the "stringValue" when the Value is different
if (!Equals(CurrentValue, lastParsedValue))
{
lastParsedValue = CurrentValue;
stringValue = CurrentValueAsString;
}
}
private void OnInput(ChangeEventArgs e)
{
// Update the value
CurrentValueAsString = stringValue = (string)e.Value;
lastParsedValue = CurrentValue;
}
private void OnBlur(FocusEventArgs e)
{
// Overwrite the stringValue property with the parsed value.
// This call Value.ToString(), so the value in the input is well formatted.
// note: Ensure the string value is valid before updating the content
if (!EditContext.GetValidationMessages(FieldIdentifier).Any())
{
stringValue = CurrentValueAsString;
}
}
}
我想做的事的例子:
使用 Producto class 完成工作。只需使用输入绑定事件将一个输入绑定到 Cost,将一个输入绑定到 SalePrice。
产品型号
public class Producto
{
decimal _cost;
public decimal Cost
{
get => _cost;
set
{
_cost = value;
this.SalePrice = _cost * 1.2;
}
}
public decimal SalePrice { get; set; }
}
您可以在模型中使逻辑尽可能复杂 class。您的输入控件将只绑定到结果值。
根据@Neil W 的回答,我做了这个代码实现来做我想做的事,制作一个 DTO 来处理属性并且它们会动态改变它们的值,我只是怀疑它是否是将输入的值传递给另一个的唯一方法
答案:
public class PrecioProductoDTO
{
private decimal precio_de_venta;
private decimal costo;
private decimal margen; //Representa un porcentaje
public decimal Costo {
get
{
return costo;
}
set
{
costo = value;
if (margen == 0)
precio_de_venta = Costo;
else
precio_de_venta = Costo * (1 + (margen / 100));
}
}
public decimal Margen_Ganancia
{
get
{
return margen;
}
set
{
margen = value;
if (margen == 0)
precio_de_venta = Costo;
else
precio_de_venta = Costo * (1 + (margen/100));
}
}
public decimal Precio_de_Venta {
get
{
return precio_de_venta;
}
set
{
precio_de_venta = value;
if (Costo != 0)
margen = ((precio_de_venta / Costo)-1)*100;
}
}
}
你好社区我正在处理一个带有十进制数量的表格,我想在其中输入一个数量并将相同的数量传递给另一个输入,问题是[=中的第一个输入12=] 有 cost
属性 和第二个 sale_price
,我也希望在输入中写入数量时更改值,所以我进行了自定义输入,但我无法使绑定正常工作以将成本值传递给 sale_price 值
这是我的表格:
<EditForm Model="Producto" OnValidSubmit="OnDataAnnonationsValidated">
<div class="col-sm-4">
<div class="form-group">
<InputLabel for="costo">Costo</InputLabel>
<CampoNumeroOnInput id="costo" Placeholder="Costo" @bind-Value="Producto.Costo" />
<p>Value: @Producto.Costo</p>
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<InputLabel for="margen">Margen de Ganancia</InputLabel>
<InputNumber @bind-Value="@Producto.Margen_de_Ganancia" />
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<InputLabel for="precioventa">Precio de Venta</InputLabel>
<InputNumber @bind-Value="@Producto.Precio_de_Venta" />
</div>
</div>
<EditForm />
@code {
[Parameter] public Producto Producto { get; set; }
[Parameter] public EventCallback OnValidSubmit { get; set; }
}
输入数字自定义:
[![@typeparam T
@inherits InputNumber<T>
<input @attributes="AdditionalAttributes"
type="number"
class="form-control form-control-sm"
value="@stringValue"
placeholder="@Placeholder"
@oninput="OnInput"
@onblur="OnBlur" />
@code {
\[Parameter\] public string Placeholder { get; set; }
private string stringValue;
private T lastParsedValue;
protected override void OnParametersSet()
{
// Only overwrite the "stringValue" when the Value is different
if (!Equals(CurrentValue, lastParsedValue))
{
lastParsedValue = CurrentValue;
stringValue = CurrentValueAsString;
}
}
private void OnInput(ChangeEventArgs e)
{
// Update the value
CurrentValueAsString = stringValue = (string)e.Value;
lastParsedValue = CurrentValue;
}
private void OnBlur(FocusEventArgs e)
{
// Overwrite the stringValue property with the parsed value.
// This call Value.ToString(), so the value in the input is well formatted.
// note: Ensure the string value is valid before updating the content
if (!EditContext.GetValidationMessages(FieldIdentifier).Any())
{
stringValue = CurrentValueAsString;
}
}
}
我想做的事的例子:
使用 Producto class 完成工作。只需使用输入绑定事件将一个输入绑定到 Cost,将一个输入绑定到 SalePrice。
产品型号
public class Producto
{
decimal _cost;
public decimal Cost
{
get => _cost;
set
{
_cost = value;
this.SalePrice = _cost * 1.2;
}
}
public decimal SalePrice { get; set; }
}
您可以在模型中使逻辑尽可能复杂 class。您的输入控件将只绑定到结果值。
根据@Neil W 的回答,我做了这个代码实现来做我想做的事,制作一个 DTO 来处理属性并且它们会动态改变它们的值,我只是怀疑它是否是将输入的值传递给另一个的唯一方法
答案:
public class PrecioProductoDTO
{
private decimal precio_de_venta;
private decimal costo;
private decimal margen; //Representa un porcentaje
public decimal Costo {
get
{
return costo;
}
set
{
costo = value;
if (margen == 0)
precio_de_venta = Costo;
else
precio_de_venta = Costo * (1 + (margen / 100));
}
}
public decimal Margen_Ganancia
{
get
{
return margen;
}
set
{
margen = value;
if (margen == 0)
precio_de_venta = Costo;
else
precio_de_venta = Costo * (1 + (margen/100));
}
}
public decimal Precio_de_Venta {
get
{
return precio_de_venta;
}
set
{
precio_de_venta = value;
if (Costo != 0)
margen = ((precio_de_venta / Costo)-1)*100;
}
}
}