为什么此模型状态无效?

时间:2019-06-05 12:27:47

标签: c# asp.net asp.net-core razor

所以我正在研究.NET Core应用程序,但偶然发现了这一点。我的modelstate无效,它没有任何错误。

我的普通模型班:

    public class MoederbladABNA
    {
        public int Id { get; set; }

        public string Naam_betaler_of_Begunstigde { get; set; }

        public string IBAN_Rekeningnummer { get; set; }

        public string BIC_Code_Bank { get; set; }

        public string Valuta_Soort { get; set; }

        public string Bedrag { get; set; }

        public string Adres_Begunstigde { get; set; }

        public string Woonplaats_Betaler_of_Begunstigde { get; set; }

        public string Land_code { get; set; }

        public string Transactiekosten { get; set; }

        public string Betalingskenmerk { get; set; }

        public string Omschrijving { get; set; }

        public string Machtigingskenmerk { get; set; }

        public string Datum_van_machtiging { get; set; }

        [DataType(DataType.MultilineText)]
        public string Incassodatum { get; set; }

        public bool Gemuteerd { get; set; }

        public Reden MutatieReden { get; set; }

        public bool FirstIncasso { get; set; }
    }

    public enum Reden
    {
        [Display(Name = "Niet van toepassing")] NietVanToepassing = 1,
        [Display(Name = "Administratieve reden")] AdministratieveReden = 2,
        [Display(Name = "Niet akkoord klant")] NietAkkoordKlant = 3,
        [Display(Name = "Incasso blokkade")] IncassoBlokkade = 4,
    }

创建操作使用的我的viewmodel类:

    public class MoederbladViewModels
    {
        public class AddMoederbladViewModels
        {
            public int Id { get; set; }

            [Required(ErrorMessage = "Het veld '{0}' is verplicht")]
            [DisplayName("Naam betaler of begunstigde")]
            public string Naam_betaler_of_Begunstigde { get; set; }

            [Required(ErrorMessage = "Het veld '{0}' is verplicht")]
            [DisplayName("IBAN (Rekeningnummer)")]
            public string IBAN_Rekeningnummer { get; set; }

            [Required(ErrorMessage = "Het veld '{0}' is verplicht")]
            [DisplayName("BIC Code")]
            public string BIC_Code_Bank { get; set; }

            [Required(ErrorMessage = "Het veld '{0}' is verplicht")]
            [DisplayName("Valuta")]
            public string Valuta_Soort { get; set; }

            [Required(ErrorMessage = "Het veld '{0}' is verplicht")]
            [DisplayName("Bedrag")]
            [RegularExpression("^[0-9]{1,2}([,.][0-9]{1,2})?$", ErrorMessage = "Dat is geen geldig bedrag.")]
            public string Bedrag { get; set; }

            [Required(ErrorMessage = "Het veld '{0}' is verplicht")]
            [DisplayName("Adres begunstigde")]
            public string Adres_Begunstigde { get; set; }

            [Required(ErrorMessage = "Het veld '{0}' is verplicht")]
            [DisplayName("Woonplaats betaler/begunstigde")]
            public string Woonplaats_Betaler_of_Begunstigde { get; set; }

            [Required(ErrorMessage = "Het veld '{0}' is verplicht")]
            [DisplayName("Landcode")]
            public string Land_code { get; set; }

            [Required(ErrorMessage = "Het veld '{0}' is verplicht")]
            [DisplayName("Transactiekosten")]
            public string Transactiekosten { get; set; }

            [Required(ErrorMessage = "Het veld '{0}' is verplicht")]
            [DisplayName("Betalingskenmerk")]
            public string Betalingskenmerk { get; set; }

            [Required(ErrorMessage = "Het veld '{0}' is verplicht")]
            [DisplayName("Omschrijving")]
            public string Omschrijving { get; set; }

            [Required(ErrorMessage = "Het veld '{0}' is verplicht")]
            [DisplayName("Machtigingskenmerk")]
            public string Machtigingskenmerk { get; set; }

            [DisplayName("Datum van machtiging")]
            [Required(ErrorMessage = "Het veld '{0}' is verplicht")]
            public string Datum_van_machtiging { get; set; }

            [DataType(DataType.MultilineText)]
            public string Incassodatum { get; set; }

            [Required(ErrorMessage = "Het veld '{0}' is verplicht")]
            [Display(Name = "Mutatie")]
            public bool Gemuteerd { get; set; }

            [Display(Name = "Reden voor mutatie")]
            public Reden MutatieReden { get; set; }

            [Required(ErrorMessage = "Het veld '{0}' is verplicht")]
            [Display(Name = "First incasso")]
            public bool FirstIncasso { get; set; }
        }

        public enum Reden
        {
            [Display(Name = "Niet van toepassing")] NietVanToepassing = 1,
            [Display(Name = "Administratieve reden")] AdministratieveReden = 2,
            [Display(Name = "Niet akkoord klant")] NietAkkoordKlant = 3,
            [Display(Name = "Incasso blokkade")] IncassoBlokkade = 4,
        }
    }

我的观点:

@model bespaartoppers.ViewModels.MoederbladViewModels.AddMoederbladViewModels
@addTagHelper *, InvariantDecimalTagHelper
@{
    ViewData["Title"] = "Create";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Nieuwe aanmaken</h2>

<h4>Moederblad ABNA</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="Create">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Naam_betaler_of_Begunstigde" class="control-label"></label>
                <input asp-for="Naam_betaler_of_Begunstigde" class="form-control" />
                <span asp-validation-for="Naam_betaler_of_Begunstigde" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="IBAN_Rekeningnummer" class="control-label"></label>
                <input data-rule-bankaccountNL="true" asp-for="IBAN_Rekeningnummer" class="form-control" />
                <span asp-validation-for="IBAN_Rekeningnummer" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="BIC_Code_Bank" class="control-label"></label>
                <input data-rule-bic="true" asp-for="BIC_Code_Bank" class="form-control" />
                <span asp-validation-for="BIC_Code_Bank" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Valuta_Soort" class="control-label"></label>
                <input asp-for="Valuta_Soort" class="form-control" />
            </div>
            <div class="form-group">
                <label asp-for="Bedrag" class="control-label"></label>
                <input asp-for="Bedrag" class="form-control"/>
                <span asp-validation-for="Bedrag" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Adres_Begunstigde" class="control-label"></label>
                <input asp-for="Adres_Begunstigde" class="form-control" />
                <span asp-validation-for="Adres_Begunstigde" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Woonplaats_Betaler_of_Begunstigde" class="control-label"></label>
                <input asp-for="Woonplaats_Betaler_of_Begunstigde" class="form-control" />
                <span asp-validation-for="Woonplaats_Betaler_of_Begunstigde" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Land_code" class="control-label"></label>
                <input asp-for="Land_code" class="form-control" />
            </div>
            <div class="form-group">
                <label asp-for="Transactiekosten" class="control-label"></label>
                <input asp-for="Transactiekosten" class="form-control" />
            </div>
            <div class="form-group">
                <label asp-for="Betalingskenmerk" class="control-label"></label>
                <input asp-for="Betalingskenmerk" class="form-control" />
                <span asp-validation-for="Betalingskenmerk" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Omschrijving" class="control-label"></label>
                <input asp-for="Omschrijving" class="form-control" />
                <span asp-validation-for="Omschrijving" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Machtigingskenmerk" class="control-label"></label>
                <input asp-for="Machtigingskenmerk" class="form-control" />
                <span asp-validation-for="Machtigingskenmerk" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Datum_van_machtiging" class="control-label"></label>
                <input asp-for="Datum_van_machtiging" class="form-control" placeholder="DD/MM/JJJJ"/>
                <span asp-validation-for="Datum_van_machtiging" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label class="control-label">Incassodatum (optioneel)</label>
                <textarea asp-for="Incassodatum" placeholder="DD/MM/JJJJ" class="form-control"></textarea>
                <span asp-validation-for="Incassodatum" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Gemuteerd" class="control-label"></label>
                <div id="mutatie" class="checkbox">
                    <input asp-for="Gemuteerd" />
                    <span asp-validation-for="Gemuteerd" class="text-danger"></span>
                </div>
            </div>
            <div id="mutatiereden" class="form-group">
                <label asp-for="MutatieReden" class="control-label"></label>
                <div class="dropdown" style="color:black!important">
                    <select asp-for="MutatieReden" asp-items="Html.GetEnumSelectList<Reden>()">
                        <option selected="selected" value="">---Selecteer---</option>
                    </select>
                </div>
            </div>
            <div class="form-group">
                <label asp-for="FirstIncasso" class="control-label"></label>
                <div class="checkbox">
                    @Html.CheckBoxFor(item => item.FirstIncasso)
                </div>
            </div>
            <div class="form-group">
                <input type="submit" value="Aanmaken" class="btn btn-default" />
            </div>
        </form>
    </div>
</div>

<div>
    <a asp-action="Index">Terug naar de lijst</a>
</div>
@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
<script type="text/javascript" src="~/lib/jquery/dist/jquery.js"></script>
<script>
    $('#mutatiereden').hide();
    $('#mutatie').change(function () {
        $('#mutatiereden').toggle();
    });
</script>

控制器代码:

       // POST: Moederblads/Create
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("Naam_betaler_of_Begunstigde,IBAN_Rekeningnummer,Land_code,BIC_Code_Bank,Bedrag,Adres_Begunstigde,Woonplaats_Betaler_of_Begunstigde,Betalingskenmerk,Transactiekosten,Valuta_Soort,Omschrijving,Machtigingskenmerk,Datum_van_machtiging,Incassodatum,Gemuteerd,MutatieReden,FirstIncasso")]AddMoederbladViewModels addMoederbladViewModels)
        {
            var errors = ModelState.Values.SelectMany(v => v.Errors);
            if (ModelState.IsValid)
            {
                var moederblad = new MoederbladABNA()
                {
                    Naam_betaler_of_Begunstigde = addMoederbladViewModels.Naam_betaler_of_Begunstigde,
                    IBAN_Rekeningnummer = addMoederbladViewModels.IBAN_Rekeningnummer,
                    Land_code = addMoederbladViewModels.Land_code,
                    BIC_Code_Bank = addMoederbladViewModels.BIC_Code_Bank,
                    Bedrag = addMoederbladViewModels.Bedrag,
                    Adres_Begunstigde = addMoederbladViewModels.Adres_Begunstigde,
                    Woonplaats_Betaler_of_Begunstigde = addMoederbladViewModels.Woonplaats_Betaler_of_Begunstigde,
                    Betalingskenmerk = addMoederbladViewModels.Betalingskenmerk,
                    Transactiekosten = addMoederbladViewModels.Transactiekosten,
                    Valuta_Soort = addMoederbladViewModels.Valuta_Soort,
                    Omschrijving = addMoederbladViewModels.Omschrijving,
                    Machtigingskenmerk = addMoederbladViewModels.Machtigingskenmerk,
                    Datum_van_machtiging = addMoederbladViewModels.Datum_van_machtiging,
                    Incassodatum = addMoederbladViewModels.Incassodatum,
                    Gemuteerd = addMoederbladViewModels.Gemuteerd,
                    FirstIncasso = addMoederbladViewModels.FirstIncasso
                };

                _context.Add(moederblad);
                await _context.SaveChangesAsync();
                return RedirectToAction(nameof(Index));
            }
            return View(addMoederbladViewModels);
        }

因此,当调试并悬停在此行上时:
var errors = ModelState.Values.SelectMany(v => v.Errors);

它显示0错误,我比较了viewmodel类和普通类的所有属性,检查了控制器中的所有绑定值,我唯一能想到的是在那种情况下Id为0,但这是自动的增加,这样就不会出现问题。

0 个答案:

没有答案