C# ASP.NET核心剃须刀页面模型状态无效&;模型数据为空
我是ASP.NET核心razor页面的新手&在练习时,我遇到了一个与Core2.1 razor页面中的ViewModel绑定相关的问题。当我发布表单数据时,它会显示ModelState对于空数据无效 这是我的剃须刀页面-C# ASP.NET核心剃须刀页面模型状态无效&;模型数据为空,c#,asp.net-core,asp.net-core-mvc,asp.net-core-2.0,razor-pages,C#,Asp.net Core,Asp.net Core Mvc,Asp.net Core 2.0,Razor Pages,我是ASP.NET核心razor页面的新手&在练习时,我遇到了一个与Core2.1 razor页面中的ViewModel绑定相关的问题。当我发布表单数据时,它会显示ModelState对于空数据无效 这是我的剃须刀页面- <form id="KycForm" method="post" class="validate-modern wizard-wrap wizard-simple" enctype="multipart/form-data"> <div class=
<form id="KycForm" method="post" class="validate-modern wizard-wrap wizard-simple" enctype="multipart/form-data">
<div class="wizard-head d-none">
<h5>Step 1</h5>
<span>Personal Details</span>
</div>
<div class="wizard-content">
<div class="row">
<div class="col-md-6">
<div class="input-item input-with-label">
<label class="input-item-label">Email <span class="text-danger">*</span></label>
<input class="input-bordered required" asp-for="Email" type="text" data-msg="Required" name="dob" min="1920-01-01" max="2009-12-12">
<span asp-validation-for="Email" class="text-danger"></span>
</div><!-- .input-item -->
</div>
<div class="col-md-6">
<div class="input-item input-with-label">
<label class="input-item-label">First Name <span class="text-danger">*</span></label>
<input class="input-bordered required" asp-for="FirstName" type="text" data-msg="Required" name="dob" min="1920-01-01" max="2009-12-12">
<span asp-validation-for="FirstName" class="text-danger"></span>
</div><!-- .input-item -->
</div>
<div class="col-md-6">
<div class="input-item input-with-label">
<label class="input-item-label">Last Name <span class="text-danger">*</span></label>
<input class="input-bordered required" asp-for="FirstName" type="text" data-msg="Required" name="dob" min="1920-01-01" max="2009-12-12">
<span asp-validation-for="FirstName" class="text-danger"></span>
</div><!-- .input-item -->
</div>
<div class="col-12">
<h5 class="font-mid">Upload Here Your Passport Copy</h5><p></p>
<div class="gaps-2x"></div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="row align-items-center">
<div class="col-md-6">
<div class="input-item input-with-label">
<div class="relative">
<em class="input-file-icon fas fa-upload"></em>
<input type="file" asp-for="UploadPOIF" class="input-file required" data-msg="Required" id="filePass">
<label for="filePass">Choose a file</label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
页面模型-
public class TestModel : PageModel
{
[BindProperty]
public IFormFile UploadPOIF { get; set; }
[BindProperty, Required, EmailAddress, StringLength(256, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 4)]
public string Email { get; set; }
[BindProperty, Required]
public string FirstName { get; set; }
[BindProperty, Required]
public string LastName { get; set; }
public async Task<IActionResult> OnPostAsync()
{
if (ModelState.IsValid)
{
await UploadPhoto();
}
return Page();
}
}
公共类TestModel:PageModel
{
[BindProperty]
公共文件上载POIF{get;set;}
[BindProperty,必需,EmailAddress,StringLength(256,ErrorMessage={0}必须至少有{2}个字符长,最小长度=4)]
公共字符串电子邮件{get;set;}
[BindProperty,必选]
公共字符串名{get;set;}
[BindProperty,必选]
公共字符串LastName{get;set;}
公共异步任务OnPostAsync()
{
if(ModelState.IsValid)
{
等待上传照片();
}
返回页();
}
}
但是mymodelstate.IsValid返回false&在ViewModel中没有数据。
尽管在字段中过帐数据,但字段数据在PageModel上不可用,包括无效的ModelState。我的问题是什么导致了这个问题是jJquery表单提交的问题还是我遗漏了什么
在您的模型中,您已经指定了验证字段,如必填、长度检查和电子邮件地址。这些将使您的模型无效,请删除它们或满足它们的条件。输入标记帮助程序为
asp for
属性中指定的表达式名称生成id
和name
HTML属性
例如:
生成:
您应该从input
元素中删除name
属性
此外,您缺少属性LastName
的编辑器
...
<div class="row">
<div class="col-md-6">
<div class="input-item input-with-label">
<label class="input-item-label">Email <span class="text-danger">*</span></label>
<input class="input-bordered required" asp-for="Email" type="text" data-msg="Required" min="1920-01-01" max="2009-12-12">
<span asp-validation-for="Email" class="text-danger"></span>
</div><!-- .input-item -->
</div>
<div class="col-md-6">
<div class="input-item input-with-label">
<label class="input-item-label">First Name <span class="text-danger">*</span></label>
<input class="input-bordered required" asp-for="FirstName" type="text" data-msg="Required" min="1920-01-01" max="2009-12-12">
<span asp-validation-for="FirstName" class="text-danger"></span>
</div><!-- .input-item -->
</div>
<div class="col-md-6">
<div class="input-item input-with-label">
<label class="input-item-label">Last Name <span class="text-danger">*</span></label>
<input class="input-bordered required" asp-for="LastName" type="text" data-msg="Required" min="1920-01-01" max="2009-12-12">
<span asp-validation-for="LastName" class="text-danger"></span>
</div><!-- .input-item -->
</div>
<div class="col-12">
<h5 class="font-mid">Upload Here Your Passport Copy</h5><p></p>
<div class="gaps-2x"></div>
</div>
</div>
...
。。。
电子邮件*
名字*
姓*
在此上传您的护照副本
...
谢谢,但我正在传递正确的数据&当我标记UploadPOIF为[Required]时,它显示为空,但当我删除所有文本框并删除文件上传器Required属性时,它就工作了。感谢我还有两个查询,我正在尝试添加文件扩展名属性,但运气不佳,模型验证总是错误的[FileExtensions](Extensions=“.png、.jpg、.jpeg、.gif、.tif、.heic、.heif”,ErrorMessage=“上传的文件不是有效的图像。只接受jpg、png和gif文件。”)]这也是我正在做的事情,我如何使用条件[必需]属性?非常感谢
...
<div class="row">
<div class="col-md-6">
<div class="input-item input-with-label">
<label class="input-item-label">Email <span class="text-danger">*</span></label>
<input class="input-bordered required" asp-for="Email" type="text" data-msg="Required" min="1920-01-01" max="2009-12-12">
<span asp-validation-for="Email" class="text-danger"></span>
</div><!-- .input-item -->
</div>
<div class="col-md-6">
<div class="input-item input-with-label">
<label class="input-item-label">First Name <span class="text-danger">*</span></label>
<input class="input-bordered required" asp-for="FirstName" type="text" data-msg="Required" min="1920-01-01" max="2009-12-12">
<span asp-validation-for="FirstName" class="text-danger"></span>
</div><!-- .input-item -->
</div>
<div class="col-md-6">
<div class="input-item input-with-label">
<label class="input-item-label">Last Name <span class="text-danger">*</span></label>
<input class="input-bordered required" asp-for="LastName" type="text" data-msg="Required" min="1920-01-01" max="2009-12-12">
<span asp-validation-for="LastName" class="text-danger"></span>
</div><!-- .input-item -->
</div>
<div class="col-12">
<h5 class="font-mid">Upload Here Your Passport Copy</h5><p></p>
<div class="gaps-2x"></div>
</div>
</div>
...