Добавить элемент управления для проверки в ModelState вручную - PullRequest
0 голосов
/ 08 мая 2020

У меня есть один сценарий, как указано ниже:

На моей странице xyz.cs html у меня две формы. и на странице xyz.cs html .cs у меня есть одна InputModel, которая содержит свойство для обеих форм.

public class InputModel
    {
        [Required(ErrorMessage = "The Email field is required.")]
        [EmailAddress(ErrorMessage = "Enter a valid email address.")]
        [RegularExpression(
            @"^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$",
            ErrorMessage = "Enter a valid email address.")]
        public string Email { get; set; }

        [Required(ErrorMessage = "The Password field is required.")]
        [DataType(DataType.Password)]
        public string Password_ChangeEmail { get; set; }

        [Required(ErrorMessage = "The OldPassword field is required.")]
        [DataType(DataType.Password)]
        public string OldPassword { get; set; }

        [Required(ErrorMessage = "The New Password field is required.")]
        [DataType(DataType.Password)]
        [CustomPassword(8, 15, ErrorMessage = "The password is invalid.")]
        public string Password { get; set; }

        [Required(ErrorMessage = "The Confirm Password field is required.")]
        [DataType(DataType.Password)]
        [Compare("Password", ErrorMessage = "The passwords do not match.")]
        public string ConfirmPassword { get; set; }
    }

Я использую первые 2 свойства в одной форме и остальную часть свойства во второй форме.

Теперь проблема в том, что когда я нажимаю кнопку «Отправить» из 1-й формы, она также проверяет и 2-ю форму. Итак, пока я использовал ModelState.Clear () . Но если я использую это, и я не ошибаюсь, это перестанет проверять все свойство.

Итак, если у вас есть какое-либо решение, например, можно ли управлять в ModelState вручную для проверки.

Если мне нужно поделиться чем-то еще, предложите.

Спасибо

1 Ответ

0 голосов
/ 08 мая 2020

1) Вы можете разделить модель на две, по одной модели для каждой формы и использовать их в действиях публикации для этих форм.

public class LoginModel
{
    [Required(ErrorMessage = "The Email field is required.")]
    [EmailAddress(ErrorMessage = "Enter a valid email address.")]
    [RegularExpression(
        @"^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$",
        ErrorMessage = "Enter a valid email address.")]
    public string Email { get; set; }

    [Required(ErrorMessage = "The Password field is required.")]
    [DataType(DataType.Password)]
    public string Password_ChangeEmail { get; set; }
}

public class ChangePasswordModel
{
    [Required(ErrorMessage = "The OldPassword field is required.")]
    [DataType(DataType.Password)]
    public string OldPassword { get; set; }

    [Required(ErrorMessage = "The New Password field is required.")]
    [DataType(DataType.Password)]
    [CustomPassword(8, 15, ErrorMessage = "The password is invalid.")]
    public string Password { get; set; }

    [Required(ErrorMessage = "The Confirm Password field is required.")]
    [DataType(DataType.Password)]
    [Compare("Password", ErrorMessage = "The passwords do not match.")]
    public string ConfirmPassword { get; set; }
}

2) Создайте комбинированную модель

public class InputModel
{
    public LoginModel LoginModel { get; set; }
    public ChangePasswordModel ChangePasswordModel { get; set; }

}

3) добавить два поста

    public IActionResult LoginPost(InputModel model)
    {
        ...
        return View("InputPage", model);
    } 
    public IActionResult ChangePasswordPost(InputModel model)
    {
        ...
        return View("InputPage", model);
    } 

4) использовать комбинированную модель в вашей cs html page

@model InputModel
...
@using (Html.BeginForm("LoginPost", "Home")) {
    @Html.TextBoxFor(m => m.LoginModel.Email)
    <input type="submit" value="submit" />

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...