由于两个必填字段未使用,因此MVC表单验证失败

时间:2016-09-06 13:59:35

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-validation

我正在使用MVC ViewModel。有两个单选按钮 表单中的是或否。如果用户选择“是”'将显示TextField1,如果选择'否'将显示TextField2。两者都是带*(asterick)符号的必填字段。即使两者都是必填字段,也允许用户基于单选按钮选择一次仅填充一个TextField。问题是当用户提交其中一个文本字段所需的验证错误消息正在显示时。是否有解决此问题的解决方法。

1 个答案:

答案 0 :(得分:1)

如果您只显示,则

解决此问题的最简单方法之一是使用View Models而不是将DTO对象传递给页面。

  

我需要在这里做出很多假设,因为你还没有提供任何代码,但你的问题很简单。即使我的假设不正确,也可以根据您的具体用例轻易推断原则。

我将假设您的对象看起来像这样:

public class DtoObject
{
    public bool IsPositiveSelection { get; set; }
    public string YesReason { get; set; }
    public string NoReason { get; set; }
}

如果不知道发生了什么,我会假设你有充分的理由。也许要求一个电子邮件地址和另一个电话号码。

如果您还没有,则需要创建如下视图模型:

public class DtoObjectViewModel
{
    public bool YesNoRadio { get; set; }
    [Required]
    public string Reason { get; set; }
}

我在这里做的不是制作两个单独的盒子,而是一个总是会显示的盒子。如果您确实需要一个电子邮件验证和另一个电话号码,您可以将其应用于JavaScript,而不仅仅依赖于属性。

这将允许您确保该值始终存在,无论单选按钮处于哪种状态。

在某些时候,您需要将View Model映射回您的DTO对象:

private DtoObject MapToDto(DoObjectViewModel model)
{
    return new DtoObject
    {
        IsPositiveSelection = model.YesNoRadio,
        YesReason = model.YesNoRadio ? model.Reason : "",
        NoReason = model.YesNoRadio ? "" : model.Reason
    };
}

还有很多其他选项,但这些选项需要更多的JavaScript,并且任何答案都比这个更广泛。