简体   繁体   English

ASP.NET Core Razor页面模型状态无效且模型数据为空

[英]ASP.NET Core Razor Pages Model State Is Not Valid & Model data is empty

I am new to ASP.NET core razor pages & while practising I am facing a problem related to ViewModel Binding in Core2.1 Razor Pages. 我是ASP.NET核心剃须刀页面的新手,在练习时我遇到与Core2.1 Razor Pages中的ViewModel Binding相关的问题。 When I post form data then it shows ModelState is invalid with empty data. 当我发布表单数据时,它表明ModelState与空数据无效。

Here is my Razor Page- 这是我的剃刀页-

<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>

I am using Jquery to Submit the form as we are using a predefined submit hyper link of jquery-steps(jquery-steps.com), unable to change it to button. 我正在使用Jquery提交表单,因为我们使用的是jquery-steps(jquery-steps.com)的预定义提交超链接,无法将其更改为button。 Here is my jquery submit button code, which is working- 这是我的jquery提交按钮代码,可以正常工作-

$(function () {
    $('a[href="#finish"]').click(function () {
        $('form#KycForm').submit();
    });
});

PageModel- PageModel-

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();
    }
}

But My ModelState.IsValid returns false & with out data in ViewModel. 但是My ModelState.IsValid返回false且ViewModel中没有数据。 Despite posting data in fields, field data is not available on PageModel including Invalid ModelState. 尽管在字段中发布了数据,但字段数据在PageModel上不可用,包括无效的ModelState。 My questions is about what is causing this issue is it the issue with jJquery form submission or I am missing something? 我的问题是什么引起了这个问题,是jJquery表单提交的问题还是我遗漏了什么?

在此处输入图片说明

Input tag helper generates id and name HTML attributes for the expression name specified in the asp-for attribute. 输入标签帮助程序为asp-for属性中指定的表达式名称生成idname HTML属性。

Eg: 例如:

<input asp-for="Email" />

generates: 产生:

<input id="Email" name="Email" />

You should remove name attribute from input element. 您应该从input元素中删除name属性。

Also, you are missing editor for property LastName . 此外,您缺少属性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>
...

In your model you have specified fields validation like required, length check and email address. 在模型中,您指定了字段验证,例如必填,长度检查和电子邮件地址。 These making your model invalid, either remove these or fulfill their criteria. 这些使您的模型无效,请删除这些模型或满足其条件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 ASP.NET MVC剃刀模型状态在RegisterModel上无效 - ASP.NET MVC Razor Model state not valid on RegisterModel ASP .NET Core 5 Razor 页面:如何正确使用局部视图并验证它的 model Z9ED39E28EA931586B76A - ASP .NET Core 5 Razor Pages: how to properly use Partial View and validate it's model state? ASP.NET Core 3.1 MVC Razor 页面仅在 model 成员有效时显示图标 - ASP.NET Core 3.1 MVC Razor Page show icon only if member of model is valid 带有Razor页面的ASP.NET Core MVC(无法从其他模型返回对象) - ASP.NET Core MVC with Razor Pages (can't return object from a different model) 如何仅为 ASP.Net Core Razor 页面中的一个 Model 启用 ModelState 验证? - How enable ModelState validation just for one Model in ASP.Net Core Razor Pages? 如何在 asp.net 内核 razor 页面 MVVM 之间传递或引用 model - how to pass or reference model between asp.net core razor pages MVVM 后处理程序上的部分页面模型未执行 ASP.NET Core Razor Pages 2.0 - partial page model on post handler is not executing | ASP.NET Core Razor Pages 2.0 返回视图(模型:MyModel); 相当于 ASP.Net Core Razor Pages - return View(model: MyModel); equivalent in ASP.Net Core Razor Pages ASP.NET 内核 Razor 页面 OnGet 错误 model 未执行 - ASP.NET Core Razor Pages OnGet of Error model not being executed 模型绑定从ASP.NET Core Razor Pages / MVC中的配置创建的表单 - Model binding a form created from configurations in ASP.NET Core Razor Pages/MVC
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM