Как я могу сделать мой ModelState допустимым с пустыми полями? - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть 3 строки для ввода достижений на моей странице. Я хочу, чтобы состояние ViewModel было действительным, даже если заполнена только 1 из строк. Сейчас состояние модели действительно только тогда, когда я заполняю все 3 строки.

Нужно ли создавать для этого несколько конструкторов?

    public int AchievementsRank1 { get; set; }
    public string AchievementsEvent1 { get; set; }

    public int AchievementsRank2 { get; set; }
    public string AchievementsEvent2 { get; set; }

    public int AchievementsRank3 { get; set; }
    public string AchievementsEvent3 { get; set; }

    public EditProfileViewModel()
    {

    }

    public EditProfileViewModel(string username, int achievementsR1, string achievementsE1, int achievementsR2, string achievementsE2, int achievementsR3, string achievementsE3, string freetext, string social)
    {
        this.Username = username;
        this.AchievementsRank1 = achievementsR1;
        this.AchievementsEvent1 = achievementsE1;
        this.AchievementsRank2 = achievementsR2;
        this.AchievementsEvent2 = achievementsE2;
        this.AchievementsRank3 = achievementsR3;
        this.AchievementsEvent3 = achievementsE3;
        this.Freetext = freetext;
        this.SocialURL = social;
    }
    [ValidateAntiForgeryToken]
    public IActionResult Index([Bind("Username,AchievementsRank1,AchievementsEvent1,AchievementsRank2,AchievementsEvent2,AchievementsRank3,AchievementsEvent3,Freetext,SocialURL")] EditProfileViewModel edit)
    {
        if (ModelState.IsValid)
        {
            ProfileDTO dto = CreateDtoFromInput(edit);
            //commands.SaveNewProfile(dto);
            Profile prof = new Profile(dto);
            return View("Profile", prof);
        }
        else
        {
            return View(edit);
        }
    }

1 Ответ

0 голосов
/ 06 ноября 2019

Проверка ViewModel обычно сосредоточена на 1 свойстве.

Вы можете создать пользовательскую аннотацию и "объединить" несколько свойств и создать свои собственные правила проверки. Как вы можете прочитать, этот подход использует аннотацию вместо bind(.

. Я также рекомендую изменить из множества свойств один объект в качестве ViewModel, он будет выглядеть чище.

public class Movie
{
    public int Id { get; set; }

    [Required]
    [StringLength(100)]
    public string Title { get; set; }

    [CustomAnnotation(x,y,z)]
    [StringLength(1000)]
    public string Description { get; set; }

    [Range(0, 999.99)]
    public decimal Price { get; set; }

    [Required]
    public Genre Genre { get; set; }

    public bool Preorder { get; set; }
}

Смотрите примеры здесь https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-3.0

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