[英]String is empty but ModelState is still valid with various annotations to make it invalid
[英]How can I make my ModelState be valid with empty fields?
我的页面上有 3 行用于成就输入。 我希望 ViewModel state 有效,即使只有 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);
}
}
ViewModel 验证通常集中在 1 个属性上。
您可以创建自定义注释并“组合”多个属性并创建自己的验证规则。 如您所见,这种方法使用注解而不是bind(
。
我还会建议将很多属性更改为一个 object 作为 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.