Как правильно проверить форму в asp. net MVC с помощью ViewModel? - PullRequest
0 голосов
/ 01 мая 2020

Я следовал документации здесь и здесь , но атрибуты проверки, похоже, не работают. У меня есть это в моем RModel:

[RegularExpression(@"^[A-Z]+[a-zA-Z'\s]*$")]
[Required]
[StringLength(10)]
public string FirstName { get; set; }

[Required]
[EmailAddress]
public string Email { get; set; }

И это на мой взгляд:

@using (Html.BeginForm("Index", "RHome", FormMethod.Post))
{
    <div class="field form-group col-sm-4">
        <input type="text" id="FirstName" placeholder=" ">
        <label for="FirstName">First Name</label>
        <span asp-validation-for="RModel.FirstName"></span>
    </div>

    <div class="field form-group col-sm-8">
        <input id="Email" placeholder=" ">
        <label for="Email">Email</label>
        <span asp-validation-for="RModel.Email"></span>
    </div>
    . . .
}

Я использую ViewModel для загрузки в несколько моделей. Другие модели очень похожи на RModel. Я не знаю, повлияет ли это на что-нибудь, но я думаю, что это может.

public class ViewModelR
{
    public RModel RModel { get; set; }
    public KnowledgeModel KnowledgeModel { get; set; }
}

Я просто хочу провести проверку на стороне сервера и клиента, чтобы предотвратить инъекцию и неправильные вводы и прочее. Как мне это сделать?

ОБНОВЛЕНИЕ: я добавил в свое представление, и теперь, когда я нажимаю кнопку Отправить, не заполняя любой ввод, я, кажется, получаю сообщение о том, что [required] работает.

The Email: field is required.
The First Name: field is required.

Это здорово, но мне нужно, чтобы все остальные проверки работали, чтобы я мог предотвратить неправильные значения?

1 Ответ

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

Я бы посоветовал вам использовать scafolding для сообщения валидации с каждым входным html элементом, который у вас есть в вашем представлении.

@Html.ValidationMessageFor(model => model.RHome.FirstName, "", new { @class = "text-danger" })

Надеюсь, вы уже добавили по крайней мере ниже js в вашем представлении .

jquery.validate.unobtrusive.js
...