Недопустимое состояние модели ASP.NET Core Razor Pages и данные модели пусты

2

Я новичок в основных страницах бритвы ASP.NET и во время практики сталкиваюсь с проблемой, связанной с привязкой ViewModel в Core2.1 Razor Pages. Когда я публикую данные формы, это показывает, что ModelState недействителен с пустыми данными.

Вот моя бритва 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>

Я использую Jquery для отправки формы, так как мы используем предопределенную гиперссылку отправки из jquery-steps (jquery-steps.com), но не могу изменить ее на кнопку. Вот мой код кнопки отправки jquery, который является working-

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

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

Но My ModelState.IsValid возвращает false и без данных во ViewModel. Несмотря на размещение данных в полях, полевые данные недоступны в PageModel, включая Invalid ModelState. Мои вопросы о том, что является причиной этой проблемы, это проблема с отправкой формы jJquery, или я что-то упустил?

Изображение 174551

Теги:
asp.net-core
asp.net-core-mvc
asp.net-core-2.0
razor-pages

2 ответа

3
Лучший ответ

Вспомогательный тег ввода генерирует атрибуты HTML id и name для имени выражения, указанного в атрибуте asp-for.

Например:

<input asp-for="Email"/>

генерирует:

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

Вы должны удалить атрибут name из элемента input.

Также вам не хватает редактора для свойства 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>
...
  • 0
    Спасибо У меня есть еще 2 запроса, я пытаюсь добавить атрибут расширения файла, но без удачи, проверка модели всегда ложна [FileExtensions (Extensions = ".png, .jpg, .jpeg, .gif, .tif, .heic, .heif" , ErrorMessage = "Загруженный файл не является допустимым изображением. Принимаются только файлы JPG, PNG и GIF.")] Это то, что я делаю, и как я могу использовать условный атрибут [Обязательный]? большое спасибо
0

В вашей модели вы указали поля проверки, такие как обязательные, проверка длины и адрес электронной почты. Это делает вашу модель недействительной, либо удаляет их, либо соответствует их критериям.

  • 0
    Спасибо, но я передаю правильные данные, и когда я отмечаю, что UploadPOIF имеет значение [Обязательный], тогда оно становится пустым, но когда я удалил все текстовые поля и удалил обязательный атрибут загрузчика файлов, это сработало.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню