Validation MVC验证至少选中一个复选框或文本框
我有一个表单,其中必须至少选中一个复选框或填写一个文本框 我有一个ViewModel,它填充复选框列表,并在ViewModel中的SelectedWasteTypes属性需要时,将所选值加上文本框(其他)值。我认为我的问题是我不能针对这个属性进行验证,因为视图中没有与它直接相关的表单元素。我是MVC的新手,这一点让我很困惑 从ViewModelValidation MVC验证至少选中一个复选框或文本框,validation,asp.net-mvc-5,checkboxfor,Validation,Asp.net Mvc 5,Checkboxfor,我有一个表单,其中必须至少选中一个复选框或填写一个文本框 我有一个ViewModel,它填充复选框列表,并在ViewModel中的SelectedWasteTypes属性需要时,将所选值加上文本框(其他)值。我认为我的问题是我不能针对这个属性进行验证,因为视图中没有与它直接相关的表单元素。我是MVC的新手,这一点让我很困惑 从ViewModel public List<tblWasteTypeWeb> WasteTypeWebs { get; set; } public string
public List<tblWasteTypeWeb> WasteTypeWebs { get; set; }
public string WasteTypeWebOther { get; set; }
public string SelectedWasteTypes { get; set; }
我觉得我有点不知所措。。。我曾考虑过使用JQuery,但理想情况下,我希望服务器端验证能够确保捕获此信息(这是一项法律要求)。然而,如果这只能在客户端实现,我将接受它
有什么建议吗?看一下。它具有您试图完成的验证属性:
[RequiredIfEmpty]
和[RequiredIfNotEmpty]
。您还可以查看我的。我建议您在ViewModel中实现IValidatableObject
。
在Validate(ValidationContext-ValidationContext)
方法中,您可以检查您的条件是否满足。例如:
if(string.IsNullOrWhiteSpace(WasteTypeWebOther))
yield return new ValidationResult("Your validation error here.");
当我添加验证时,ViewModel似乎在pageLoad上验证,而不是在我单击submit时验证。我做错什么了吗?不过,我已经用你的建议在别的地方效果不错了!谢谢你。我不确定我应该针对什么进行验证。复选框列表来自ViewModel中的,并且最终属性实际上不在表单中表示,而是作为复选框和文本框之间的连接添加到ViewModel中。
[HttpPost]
public ActionResult OrderComplete(OrderViewModel model)
{
var sb = new StringBuilder();
if (model.WasteTypeWebs.Count(x => x.WasteTypeWebCb) != 0)
{
foreach (var cb in model.WasteTypeWebs)
{
if (cb.WasteTypeWebCb)
{
sb.Append(cb.WasteTypeWeb + ", ");
}
}
sb.Remove(sb.ToString().LastIndexOf(",", StringComparison.Ordinal), 1);
}
model.SelectedWasteTypes = sb.ToString();
if (!string.IsNullOrEmpty(model.WasteTypeWebOther))
{
if (!string.IsNullOrEmpty(model.SelectedWasteTypes))
{
model.SelectedWasteTypes = model.SelectedWasteTypes.TrimEnd() + ", " + model.WasteTypeWebOther;
}
else
{
model.SelectedWasteTypes = model.WasteTypeWebOther;
}
}
return View(model);
}
if(string.IsNullOrWhiteSpace(WasteTypeWebOther))
yield return new ValidationResult("Your validation error here.");