我目前正在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; }
}
这就是我的表单的样子:
表单提交被覆盖,如下所示:
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");
})
});
我的控制器代码:
如果您需要更多信息,请告诉我。