[英]How to insert 1 or 0 in Sql Server for bit type field if checkbox is checked?
[英]Require field if checkbox is checked
如果选中了同一表单中的复选框,则需要填写该表单中的一个字段。
似乎没有办法通过常规模型验证来执行此操作,因此我在控制器中创建了一个远程验证方法。
问题是,由于并非总是需要该字段,因此如果我将其放在该字段上,验证甚至不会触发。 因此,我尝试将验证放在复选框上,现在又遇到了另一个问题,当我向该字段添加文本时验证不会触发。
是否可以通过自定义验证来完成我需要做的事情,还是需要在JavaScript中做点什么? 如果是这样,我该怎么办?
形成:
<form>
<input type="checkbox" asp-for="NotRecommended" checked=@Model.NotRecommended /> <label>Not Recommended</label>
<textarea class="form-control" id="Notes" asp-for="Notes"></textarea>
<span asp-validation-for="NotRecommended" class="text-danger"></span>
</form>
模型:
public class DetailsViewModel
{
[DisplayName("Not Recommended")]
[Remote("RequireNoteForFlag", AdditionalFields = "Notes", ErrorMessage = "Note is required when flagging someone.")]
public bool NotRecommended { get; set; }
[DataType(DataType.MultilineText)]
[MaxLength(1500)]
[DisplayName("Notes")]
public string Notes { get; set; }
}
远程验证器
public IActionResult RequireNoteForFlag(bool NotRecommended, string Notes)
{
if (NotRecommended && String.IsNullOrWhiteSpace(Notes)) return Json("Note is required when flagging an Assessor");
else return Json(true);
}
我已经以类似的方式使用自定义验证器实现了这一点。 但是我将注释应用于必填字段,并在参数中包含条件,例如:
[RequiredIf("NotRecommended = true")]
public string Notes { get; set; }
但是,您可能已经知道,无法在数据注释中交叉引用另一个属性,因此您将需要内置javascript来处理此问题。
非侵入式验证会向输入元素添加data-val =“ true”和data-val-required =“错误消息”属性,因此在选中复选框时通过javascript添加此属性即可。
您还需要重新初始化表单验证,以便添加具有新应用的验证属性的输入。
乔在评论中给了我几乎整个答案,但是还没有将它发布为答案,因此我会将它发布给其他可能需要这样做的人。
修改的客户端验证
jQuery.validator.addMethod("requiredwhen", function (value, element, param) {
var otherPropId = $(element).data('val-other');
if (otherPropId) {
var otherProp = $(otherPropId)[0].checked;
if (otherProp) {
return element.value.length > 0;
}
}
return true;
});
jQuery.validator.unobtrusive.adapters.addBool("requiredwhen");
视图
<input type="checkbox" asp-for="NotRecommended" /> <label asp-for="NotRecommended"></label>
<textarea class="form-control" id="Notes" asp-for="Notes"></textarea>
<span asp-validation-for="NotRecommended" class="text-danger"></span>
模型
[DisplayName("Not Recommended")]
public bool NotRecommended { get; set; }
[DataType(DataType.MultilineText)]
[MaxLength(1500)]
[DisplayName("Notes")]
[RequiredWhen("NotRecommended", true, AllowEmptyStrings = false, ErrorMessage ="A note is required when flagging an Assessor.")]
public string Notes { get; set; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.