问题:
当表单的信息发送到 POST 操作时,浮点变量会丢失小数点并转换为integer
代替float
.
信息:
这是包含变量定义的类:PUnit
and CoinValue
:
public class Device
{
[Key]
public int DeviceID { get; set; }
[Display(Name = "Precio por Jugada")]
public float PUnit { get; set; }
public float CoinValue { get; set; }
}
在视图中,我呈现了此类的集合,每个类都包装在一个表单中,以便单独发送到控制器:
@model IEnumerable<Application.Models.Device>
{...}
<div class="form-group" form="@(String.Format("{0}{1}", "form", item.DeviceID))">
<div>
<input type="number" name="CoinValue" asp-for="@item.CoinValue" min="0" max="5" step="0.5"
form="@(String.Format("{0}{1}", "form", item.DeviceID))" class="form-control" />
<span asp-validation-for="@item.CoinValue" class="text-danger"></span>
</div>
</div>
在 POST 操作中,信息Device
被保存:
[HttpPost, ActionName("Contadores")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Contadores(int? id)
{
var contadortoupdate = _context.Devices.SingleOrDefault(c => c.DeviceID == id.Value);
if (await TryUpdateModelAsync(contadortoupdate, "",
c => c.DeviceStatus, c => c.InitialAmount, c=>c.CoinValue, c => c.PUnit, c => c.SellType))
{
await _context.SaveChangesAsync();
return RedirectToAction("Contadores");
}
return RedirectToAction("Contadores");
}
Results:
当我插入一个值时0,5
,例如,它被转换并保存到数据库中为 5。与 4,5 相同;显示为45,我不知道为什么会这样。感谢您的任何建议。
UPDATE:
使用 Chrome 进行调试后,我发现表单中的数字是用以下格式发送的:1.5
代替1,5
这会导致错误。这种情况只发生在这个视图中,因为我在另一个视图上测试了它,并且它没有改变数字的格式。
这两种形式之间的区别在于,第二种形式仅定义为输入:
<div class="form-group">
<label asp-for="StoreArea" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="StoreArea" class="form-control" />
<span asp-validation-for="StoreArea" class="text-danger"></span>
</div>
</div>
虽然第一个被定义为
<input type="number" {...}>
我相信添加此“type =“number””属性是改变输入格式的属性但我的数据库不接受该值有效, 我相信。