【问题标题】:DisplayFormat ApplyFormatInEditMode Not Working as Expected - .NET Core Razor Pages EF CoreDisplayFormat ApplyFormatInEditMode 无法按预期工作 - .NET Core Razor Pages EF Core
【发布时间】:2020-12-08 13:57:12
【问题描述】:

创建、删除、详细信息、编辑和索引视图已使用添加新的脚手架项目“使用实体框架 (CRUD) 的 Razor 页面”生成。详细信息、编辑和索引视图确实显示货币格式,但创建不显示。如何在创建视图和编辑视图中显示货币格式?

LoanEstimate.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace LoanCalculator.Models
{
    [ModelMetadataType(typeof(LoanEstimateMetadata))]
    public partial class LoanEstimate
    {

    }
    public class LoanEstimateMetadata
    {
        [DisplayName("Annual Taxes")]
        [DataType(dataType: DataType.Currency)]
        [DisplayFormat(DataFormatString = "{0:C0}", ApplyFormatInEditMode = true)]
        public decimal AnnualTaxes { get; set; }
    [DisplayFormat(DataFormatString = "{0:p}", ApplyFormatInEditMode = true)]
    public decimal Rate { get; set; }

    }
}

创建.cshtml

    <div class="form-group">
        <label asp-for="LoanEstimate.AnnualTaxes" class="control-label"></label>
        <input asp-for="LoanEstimate.AnnualTaxes" class="form-control" />
        <span asp-validation-for="LoanEstimate.AnnualTaxes" class="text-danger"></span>
    </div>

创建页面问题:未应用货币格式

编辑页面问题:货币格式最初是应用的,但是当我编辑时它被删除了
初始页面加载

修改后


百分比数据格式字符串也有同样的问题。

【问题讨论】:

    标签: asp.net-core razor .net-core entity-framework-core


    【解决方案1】:

    使用货币编辑输入是客户端行为,但 DisplayFormat 是服务器端行为。因此您可以使用正确的格式呈现小数但无法使用货币进行编辑。常见的方法是使用 jquery。

    我建议你可以像下面这样使用autoNumeric.js

    <input asp-for="LoanEstimate.AnnualTaxesDisplayOnly" class="form-control" />
    <script>
        var autoNumericInstance = new AutoNumeric("input[id='LoanEstimate_AnnualTaxesDisplayOnly']").northAmerican();
        $("input[id='LoanEstimate_AnnualTaxesDisplayOnly']").on('keyup', function () {
            $("input[id='LoanEstimate_AnnualTaxes']").val(autoNumericInstance.getNumericString());
        }); 
    </script>
    

    结果:

    【讨论】:

    • 谢谢!这行得通,但引入了另一个障碍。通过 js 输入一个使用货币符号格式化的值后,我收到一条验证消息“该字段年税必须是一个数字”。你对如何解决这个问题有什么建议?
    • 请编辑您的答案以包含以下解决障碍的概念,我会将其标记为答案:var autoNumericInstance = new AutoNumeric("input[id='LoanEstimate_AnnualTaxesDisplayOnly']").northAmerican( ); $("input[id='LoanEstimate_AnnualTaxesDisplayOnly']").on('keyup', function () { $("input[id='LoanEstimate_AnnualTaxes']").val(autoNumericInstance.getNumericString()); });
    • 嗨@MaxPowers,我已经更新了答案。请检查。 :)
    猜你喜欢
    • 2019-08-26
    • 2018-05-03
    • 2020-12-04
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 2012-10-26
    相关资源
    最近更新 更多