C# ASP.NET核心剃须刀页面模型状态无效&;模型数据为空

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=

我是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="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>
...