加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 复杂类型的可选[必需]

发布时间:2020-12-16 07:44:56 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试将我的viewmodel设置为一个表单,该表单将收集有关加入团队的人员的信息.表单必须包含一些引导信息,然后是5个“团队成员”列表(每个包含一个名称,电子邮件和电话),前两个将是必需的.对于我的验证,我希望它在各个字段中,如下所示: Person 1:Name: (
我正在尝试将我的viewmodel设置为一个表单,该表单将收集有关加入团队的人员的信息.表单必须包含一些引导信息,然后是5个“团队成员”列表(每个包含一个名称,电子邮件和电话),前两个将是必需的.对于我的验证,我希望它在各个字段中,如下所示:

Person 1:
Name: (validation messaage)
Email: (validation message)
Phone: (validation message)

Person 2:
Name: (validation messaage)
Email: (validation message)
Phone: (validation message)

Person 3:
Name: 
Email:
Phone:

Person 4:
Name: 
Email:
Phone:

Person 5:
Name: 
Email: 
Phone:

我的viewmodel的相关部分目前是:

[Required]
public TeamMember TeamMember1 { get; set; }

[Required]
public TeamMember TeamMember2 { get; set; }

public TeamMember TeamMember3 { get; set; }

public TeamMember TeamMember4 { get; set; }

public TeamMember TeamMember5 { get; set; }

所以在我看来,我只写:

@Html.EditorFor(model=>model.TeamMember1)

@Html.EditorFor(model=>model.TeamMember2)

@Html.EditorFor(model=>model.TeamMember3)

@Html.EditorFor(model=>model.TeamMember4)

@Html.EditorFor(model=>model.TeamMember5)

编辑器模板如下所示:

@model MyProject.Models.TeamMember

<div class="editor-label">
    @Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Name)
    @Html.ValidationMessageFor(model => model.Name)
</div>

<div class="editor-label">
    @Html.LabelFor(model => model.Email)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Email)
    @Html.ValidationMessageFor(model => model.Email)
</div>

<div class="editor-label">
    @Html.LabelFor(model => model.Phone)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Phone)
    @Html.ValidationMessageFor(model => model.Phone)
</div>

很抱歉在一个帖子中投入了太多,但有没有人建议如何最好地设置它?我考虑过从RequiredAttribute继承并替换TeamMember属性上的[Required],但我不确定如何在子字段上设置验证消息.现在,即使它是空的,它也会通过所需的检查,我假设因为对象是绑定的(因此不是null),即使所有属性都是空白的.

任何反馈都表示赞赏.

解决方法

您可以编写自定义验证器.下面是如何访问其他属性值的示例.然后,您可以使用此自定义装饰TeamMember或属性
验证属性取决于验证逻辑.我会在班级推荐它

protected override ValidationResult IsValid(object value,ValidationContext validationContext)
{
    //Retreive value of Name property
    var nameProperty = validationContext.ObjectType.GetProperty("Name");
    var namePropertyValue = (string)nameProperty.GetValue(validationContext.ObjectInstance,null);

    var propertyBeingValidatedValue = (string)value;

    //Validation logic
    if ((!string.IsNullOrEmpty(propertyBeingValidatedValue)) && (!string.IsNullOrEmpty(namePropertyValue)))
    {
        //returning null means everything is good.
        return null;
    }
    //return a message in any other case.
    return new ValidationResult("Validation Message");
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读