基于用户选择的ASP.NET条件验证

时间:2015-11-22 22:39:45

标签: c# jquery asp.net forms asp.net-mvc-4

我目前正在ASP.NET MVC 4中构建一个表单,允许用户将他的团队应用于竞赛。表单包含一个单选按钮,用于确定团队成员的数量(可以是1或2)。

我的模型由以下表格组成:

Team,TeamMembers(具有来自团队的外键引用ID)

这是一个简单的主要细节关系。

到目前为止,我所建立的是一个表格,使用户可以申请2名成员。我的问题是验证在其他用户的表单字段上触发,阻止他只应用1个成员。如果单选按钮为1(对于1个团队成员),我不知道如何告诉ASP.NET不在客户端和服务器端验证这些字段。

当前的工作原理是,当用户点击单选按钮1时,表单中与团队成员2相关的部分将逐渐消失。如果他点击单选按钮2,这个表单就会淡入。

这些是我的ViewModel:

Team ViewModel:

public class TeamViewModel
    {

        public int ID { get; set; }
        [Required(ErrorMessage = "Naziv tima je obavezan")]
        [DisplayName("Naziv tima")]
        public string Naziv { get; set; }
        [DisplayName("Broj članova")]
        public int BrojClanova { get; set; }
        public int AccessCode { get; set; }
        public List<TeamMemberViewModel> Members { get; set; }

    }

团队成员ViewModel:

public class TeamMemberViewModel
    {
        public int ID { get; set; }
        [Required(ErrorMessage = "Ime je obavezno")]
        [RegularExpression("^[a-zA-Z]+$", ErrorMessage = "Ime se može sastojati samo od slova")]
        [DisplayName("Ime člana")]
        public string FirstName { get; set; }
        [Required(ErrorMessage = "Prezime je obavezno")]
        [RegularExpression("^[a-zA-Z]+$", ErrorMessage = "Prezime se može sastojati samo od slova")]
        [DisplayName("Prezime člana")]
        public string LastName { get; set; }
        [Required(ErrorMessage = "Općina je obavezna")]
        [DisplayName("Općina")]
        public string Opcina { get; set; }
        [Required(ErrorMessage = "Broj telefona je obavezan")]
        [StringLength(10, MinimumLength = 9, ErrorMessage = "Dužina broja telefona mora biti najmanje 9")]
        [RegularExpression(@"^[0-9]+$", ErrorMessage = "Broj telefona se može sastojati samo od brojeva")]
        [DisplayName("Broj telefona")]
        public string BrojTelefona { get; set; }
        [DisplayName("Veličina majice")]
        public string VelicinaMajice { get; set; }
        [Required(ErrorMessage = "Unos fakulteta/škole je obavezan")]
        [DisplayName("Fakultet/Škola")]
        public string Fakultet { get; set; }
        [Required(ErrorMessage = "Unos emaila je obavezan")]
        [EmailAddress(ErrorMessage = "Format emaila nije validan")]
        [DisplayName("Email")]
        public string Email { get; set; }
        public int TeamId { get; set; }
        public TeamViewModel Team { get; set; }
    }

这就是我的表单的样子:

Form code

表单提交被覆盖,如下所示:

var form3 = $('#team-form');
    form3.submit(function (event) {
        event.preventDefault();
        var form_status = $('<div class="form_status"></div>');
        $.ajax({
            type: "POST",
            dataType: 'json',
            url: '/Home/SubmitTeam',
            data: $('#team-form').serializeArray(),
            cache: false,
            beforeSend: function () {
                form3.prepend(form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Prijava se procesira...</p>').fadeIn());
            }
        }).
        success(function (data) {

            if (data.Ok) {
                $('#team-form')[0].reset();
                form_status.html('<p class="text-success">Vas tim je prijavljen. Vidimo se!</p>').delay(3000).fadeOut();
            }
            else {
                form_status.html('<p class="text-danger">Desila se greska. Pokusajte ponovno.</p>').delay(3000).fadeOut();
            }
        }).
            complete(function () {
                $("#team-form").each(function () { $.data($(this)[0], 'validator', false); });
                $.validator.unobtrusive.parse("#team-form");
            })

    });

我的控制器代码:

Controller code

如果您需要更多信息,请告诉我。

0 个答案:

没有答案