所以我正在研究.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,但这是自动的增加,这样就不会出现问题。