如何使我的ModelState在空白字段中有效?

问题描述 投票:0回答:1

我在页面上有3行用于输入成就。我希望即使只有1行被填充,ViewModel状态也有效。现在,仅当我填写所有3行时,modelstate才有效。

我必须为此创建多个构造函数吗?

    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);
        }
    }
c# asp.net asp.net-mvc viewmodel modelstate
1个回答
0
投票

ViewModel验证通常集中于1个属性。

您可以创建一个自定义注释,并“组合”多个属性并创建自己的验证规则。如您所见,这种方法使用注解而不是bind(

我还将建议将许多属性从一个对象更改为一个ViewModel对象,它将看起来更干净。

在这里查看示例https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-3.0

© www.soinside.com 2019 - 2024. All rights reserved.