Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation MVC验证至少选中一个复选框或文本框_Validation_Asp.net Mvc 5_Checkboxfor - Fatal编程技术网

Validation MVC验证至少选中一个复选框或文本框

Validation 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

我有一个表单,其中必须至少选中一个复选框或填写一个文本框

我有一个ViewModel,它填充复选框列表,并在ViewModel中的SelectedWasteTypes属性需要时,将所选值加上文本框(其他)值。我认为我的问题是我不能针对这个属性进行验证,因为视图中没有与它直接相关的表单元素。我是MVC的新手,这一点让我很困惑

从ViewModel

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.");