gpt4 book ai didi

c# - 仅在模型的特定部分检查 "ModelState.IsValid"

转载 作者:行者123 更新时间:2023-12-05 06:33:06 29 4
gpt4 key购买 nike

我正在使用 ASP.NET-MVC Core 2.1,我的代码中有这个 ViewModel

    public class HomeViewModel
{
public HomeViewModel()
{
Section1 = new HomeSection1ViewModel();
Section2 = new HomeSection2ViewModel();
}

public HomeSection1ViewModel Section1 { get; set; }
public HomeSection2ViewModel Section2 { get; set; }
}

public class HomeSection1ViewModel
{
public Guid ID { get; set; }
[Required(ErrorMessage = "Required")]
public string Title { get; set; }
[Required(ErrorMessage = "Required")]
public string Description { get; set; }
[Required(ErrorMessage = "Required")]
public string Link { get; set; }
}

public class HomeSection2ViewModel
{
public HomeSection2ViewModel()
{
Details = new List<HomeSection2DetailViewModel>();
}

public Guid ID { get; set; }
[Required(ErrorMessage = "Required")]
public string Title { get; set; }
[Required(ErrorMessage = "Required")]
public string Header { get; set; }
public List<HomeSection2DetailViewModel> Details { get; set; }
}

public class HomeSection2DetailViewModel
{
public Guid ID { get; set; }
[Required(ErrorMessage = "Required")]
public string Title { get; set; }
public string Description { get; set; }
public string Link { get; set; }
[Required(ErrorMessage = "Required")]
[Range(0, int.MaxValue, ErrorMessage = "Please enter a valid number")]
public int? Sequence { get; set; }
public DatabaseAction Action { get; set; }
}

我的 View 页面将绑定(bind) HomeViewModel 作为它的 Model,我的问题是如何只验证 Model 的特定部分?例如,我想在我的 Controller 中验证 Section2 而不是 Section1 。我该如何实现?

我们将不胜感激。

最佳答案

您的 HomeViewModel 有一个构造函数,它初始化 HomeSection1ViewModelHomeSection2ViewModel 属性。 DefaultModelBinder 在 POST 方法中初始化一个 HomeViewModel 的实例并调用其构造函数,这意味着 Section1Section2属性已初始化,但由于您只为一个属性设置值,另一个将因应用于其属性的验证属性而无效。

HomeViewModel 中删除构造函数,以便只有 Section2DefaultModelBinder 初始化(基于请求中的值)。 Section1 默认为 null,因此不会对其任何属性执行任何验证。

关于c# - 仅在模型的特定部分检查 "ModelState.IsValid",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50906183/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com