Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.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
C# MVC 3复选框验证_C#_Javascript_Asp.net Mvc_Asp.net Mvc 3_Model View Controller - Fatal编程技术网

C# MVC 3复选框验证

C# MVC 3复选框验证,c#,javascript,asp.net-mvc,asp.net-mvc-3,model-view-controller,C#,Javascript,Asp.net Mvc,Asp.net Mvc 3,Model View Controller,在我看来,我有3个复选框,我想通过这种方式验证它们: 如果选中一个复选框,则禁用另两个复选框;如果未选中复选框,则再次启用其他两个复选框 控制器 public ActionResult SolarPart() { var model = new SolarParentViewModel(); var list = new List<URLTimeLimitViewModel>(); list.Add(new URLTimeL

在我看来,我有3个复选框,我想通过这种方式验证它们:

如果选中一个复选框,则禁用另两个复选框;如果未选中复选框,则再次启用其他两个复选框

控制器

  public ActionResult SolarPart()
    {
        var model = new SolarParentViewModel();
        var list = new List<URLTimeLimitViewModel>();
        list.Add(new URLTimeLimitViewModel { Name = "14 dage", IsChecked = false, Id = 1 });
        list.Add(new URLTimeLimitViewModel { Name = "1 Måned", IsChecked = false, Id = 2 });
        list.Add(new URLTimeLimitViewModel { Name = "2 Måneder", IsChecked = false, Id = 3 });
        model.TimeLimit = list;
        return View(model);
    }
@for (var i = 0; i < Model.TimeLimit.Count; i++)
{
  <div class="editor-label">
    @Html.LabelFor(c=>Model.TimeLimit[i].Name, Model.TimeLimit[i].Name)
      @Html.HiddenFor(c=>Model.TimeLimit[i].Id) 
      @Html.CheckBoxFor(c=>Model.TimeLimit[i].IsChecked)
  </div>
}
public ActionResult SolarPart()
{
var模型=新的SolarParentViewModel();
var list=新列表();
添加(新的URLTIMETVIEWMODEL{Name=“14 dage”,IsChecked=false,Id=1});
添加(新的URLTIMETVIEWMODEL{Name=“1 Måned”,IsChecked=false,Id=2});
添加(新的URLTIMETVIEWMODEL{Name=“2 Måneder”,IsChecked=false,Id=3});
model.TimeLimit=列表;
返回视图(模型);
}
查看

  public ActionResult SolarPart()
    {
        var model = new SolarParentViewModel();
        var list = new List<URLTimeLimitViewModel>();
        list.Add(new URLTimeLimitViewModel { Name = "14 dage", IsChecked = false, Id = 1 });
        list.Add(new URLTimeLimitViewModel { Name = "1 Måned", IsChecked = false, Id = 2 });
        list.Add(new URLTimeLimitViewModel { Name = "2 Måneder", IsChecked = false, Id = 3 });
        model.TimeLimit = list;
        return View(model);
    }
@for (var i = 0; i < Model.TimeLimit.Count; i++)
{
  <div class="editor-label">
    @Html.LabelFor(c=>Model.TimeLimit[i].Name, Model.TimeLimit[i].Name)
      @Html.HiddenFor(c=>Model.TimeLimit[i].Id) 
      @Html.CheckBoxFor(c=>Model.TimeLimit[i].IsChecked)
  </div>
}
for(var i=0;iModel.TimeLimit[i]。名称,Model.TimeLimit[i]。名称) @Html.HiddenFor(c=>Model.TimeLimit[i].Id) @(c=>Model.TimeLimit[i].IsChecked) }
<代码> > p>如果值是互斥的,则可以考虑使用单选按钮而不是复选框。它们似乎更适合您的情景。如果出于某些非常奇怪的原因,您仍然希望使用相互排斥的复选框,那么您可以使用javascript并订阅其中每个复选框的更改事件,并根据值切换其他两个复选框。为了在服务器上验证此模型,您可以编写一个自定义验证属性,该属性可以应用于视图模型上的
TimeLimit
属性:

public class MaximumOneTimeLimitCanBeCheckedAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var list = value as IEnumerable<URLTimeLimitViewModel>;
        if (list == null)
        {
            return true;
        }
        return list.Where(x => x.IsChecked).Count() < 2;
    }
}
公共类MaximumOneTimeLimit可检查属性:ValidationAttribute
{
公共覆盖布尔值有效(对象值)
{
变量列表=作为IEnumerable的值;
if(list==null)
{
返回true;
}
return list.Where(x=>x.IsChecked).Count()<2;
}
}
然后:

public class SolarParentViewModel
{
    [MaximumOneTimeLimitCanBeChecked]
    public IList<URLTimeLimitViewModel> TimeLimit { get; set; }
}
公共类SolarParentViewModel
{
[可检查最大时间限制]
公共IList时间限制{get;set;}
}

<代码> > p>如果值是互斥的,则可以考虑使用单选按钮而不是复选框。它们似乎更适合您的情景。如果出于某些非常奇怪的原因,您仍然希望使用相互排斥的复选框,那么您可以使用javascript并订阅其中每个复选框的更改事件,并根据值切换其他两个复选框。为了在服务器上验证此模型,您可以编写一个自定义验证属性,该属性可以应用于视图模型上的
TimeLimit
属性:

public class MaximumOneTimeLimitCanBeCheckedAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var list = value as IEnumerable<URLTimeLimitViewModel>;
        if (list == null)
        {
            return true;
        }
        return list.Where(x => x.IsChecked).Count() < 2;
    }
}
公共类MaximumOneTimeLimit可检查属性:ValidationAttribute
{
公共覆盖布尔值有效(对象值)
{
变量列表=作为IEnumerable的值;
if(list==null)
{
返回true;
}
return list.Where(x=>x.IsChecked).Count()<2;
}
}
然后:

public class SolarParentViewModel
{
    [MaximumOneTimeLimitCanBeChecked]
    public IList<URLTimeLimitViewModel> TimeLimit { get; set; }
}
公共类SolarParentViewModel
{
[可检查最大时间限制]
公共IList时间限制{get;set;}
}

啊,我真是太蠢了。。。当然我应该用单选按钮,抱歉问了这么愚蠢的问题。啊,我真是太愚蠢了。。。当然,我应该使用单选按钮,抱歉这个愚蠢的问题。