在我的ASP.NET Core 1.1, EF-Core 1.1
应用中,我使用带有asp格式属性的ASP.NET MVC输入Tag helper作为asp-format="{0:C}"
,正确地将输入标记上的货币格式显示为{{ 1} ...等。但是当发布$15,201.45.00
时,模型仍然以货币格式保留这些值,因此,正如预期的那样,下面显示的POST操作失败。 问题:在发布模型之前,我们如何摆脱货币格式? 注意:输入标记助手here上的一些示例。
View
查看:
public class CustomerOrdersModelView
{
public string CustomerID { get; set; }
public int FY { get; set; }
public float? item1_price { get; set; }
public float? item2_price { get; set; }
...
public float? item9_price { get; set; }
}
POST操作: [导致问题]
<form asp-controller="CustOrders" asp-action="ProductPrices" method="post">
....
<tr>
<td>Item1:</td>
<td><input asp-for="item1_price" asp-format="{0:C}" />></td>
</tr>
<tr>
<td>Item2:</td>
<td><input asp-for="item2_price" asp-format="{0:C}" />></td>
</tr>
...
<tr>
<td>Item9:</td>
<td><input asp-for="item9_price" />></td>
</tr><tr>
<td>Item1:</td>
<td><input asp-for="item1_price" asp-format="{0:C}" /></td>
</table>
<button type="submit" name="submit" value="Add">Update Report</button>
</form>
答案 0 :(得分:0)
在显示屏中,您可以显示标签附近的货币符号。然后以{C:2}。
的格式显示字符串然后模型应该正确绑定值。
答案 1 :(得分:0)
您是否尝试将ModelBinderAttribute应用于模型?
例如,应用属性,然后从传入的RAW表单值中获取按摩值
[ModelBinder(BinderType = typeof(CustomerOrdersEntityBinder))]
public class CustomerOrdersModelView
{
public string CustomerID { get; set; }
public int FY { get; set; }
public float? item1_price { get; set; }
public float? item2_price { get; set; }
public float? item9_price { get; set; }
}
public class CustomerOrdersEntityBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext == null)
{
throw new ArgumentNullException(nameof(bindingContext));
}
var model = new CustomerOrdersModelView();
if (bindingContext.ModelType != typeof(CustomerOrdersModelView))
return TaskCache.CompletedTask;
// Try to fetch the value of the argument by name
var valueProviderResult = bindingContext.ValueProvider.GetValue("item1_price");
if (valueProviderResult == ValueProviderResult.None)
{
return TaskCache.CompletedTask;
}
model.item1_price = float.Parse(valueProviderResult.FirstValue.Replace("$",string.Empty).Replace(",",string.Empty));
bindingContext.Result = ModelBindingResult.Success(model);
return TaskCache.CompletedTask;
}
}