我有一个使用.NET MVC编写的页面。在名为PersonModel的Person的模型中,我定义了这个,它要求用户在姓氏字段中输入一些文本:
<DisplayName("Last Name"), Required()> _
Public Property LastName() As String
Get
Return _LastName
End Get
Set(ByVal value As String)
_LastName = value
End Set
End Property
在表单上,有一个用户可以检查以执行其他操作的复选框。有没有办法,使用JQuery优先,将该姓氏字段更改为非必需?如果不使用JQuery,我会接受其他建议,但是因为我在做这个复选框时做了很多事情,所以我希望我可以在那里添加这个逻辑。以下是检查此框以演示......
时我正在做的一些示例function doOwnerBusiness(event){
if ($(this).is(':checked')) {
$('input[name="People_1__LastName"], label[for="People[1]_LastName"]').hide();
$("#People_1__LastName").hide();
$("#People_1__LastName").val("");
$("#People_1__LastName :input").attr('disabled', true);
$('input[name="People[1]_Suffix"], label[for="People[1]_Suffix"]').hide();
$("#People_1__Suffix").attr('disabled', true);
$('#People_1__Suffix')[0].selectedIndex = 0;
$('#People_1__Suffix').hide();
}
else {
$('input[name="People_1__LastName"], label[for="People[1]_LastName"]').show();
$("#People_1__LastName").show();
$('#People_1__LastName :input').attr('disabled', false);
}
}
任何帮助都会受到人们的欢迎。
谢谢
威廉
以下是我如何声明我的复选框以及我正在尝试检查是否已检查的功能的一部分......
<%=Html.CheckBoxFor(Function(model) model.FirstNameAsBusiness)%>
<%=Html.LabelFor(Function(model) model.FirstNameAsBusiness)%>
Function Nominate(ByVal m As NominationModel, ByVal captchaValid As Boolean) As ActionResult
If Not m.FirstNameAsBusiness.checked AndAlso String.IsNullOrEmpty(m.lastnametext) Then
ModelState.AddModelError("LastName", "Last Name field is required if you don't yada yada...")
Return View()
End If
答案 0 :(得分:1)
简答:不。您无法通过jQuery调用绕过DataAnnotation。
从技术上讲,姓氏字段不是。因此,我将删除DataAnnotation for Required,然后在后端,当用户提交表单时,验证未选中复选框时是否存在字段值。如果条件没有传递,则该字段的ModelState出错,并重定向到该页面。 (为c#道歉):
public ActionResult Index(HomeIndexModel form)
{
if (!form.Checked && string.IsNullOrEmpty(form.LastName))
{
ModelState.AddModelError("LastName", "Last Name field is required if you don't yada yada...");
return View();
}
//conditional requirement passed...
}
如果你想获得一点点发烧友,你可以查看这个帖子,虽然这里的所有建议都是服务器端的: ASP.NET MVC Conditional validation