【问题标题】:How do I apply a required field validation only if one radio button is selected仅在选择一个单选按钮时如何应用必填字段验证
【发布时间】:2013-01-08 21:23:46
【问题描述】:

我正在使用 MVC 数据注释进行客户端验证。

你如何实现这个简单的场景:

仅根据选择一个单选按钮

时,才标记一个字段

【问题讨论】:

    标签: asp.net-mvc validation data-annotations


    【解决方案1】:

    您写的是您正在执行客户端验证,因此实现目标的一种方法是使用简单的 javascript 来删除/修改附加到您的输入元素的验证规则:

    $("#YourCheckBox").click(function(){ 
      if($(this).is(':checked')){
          $("#FirstName").rules("add","required")
      } else {
          $("#FirstName").rules("remove","required")
      }
    });
    

    你可以在这里http://docs.jquery.com/Plugins/Validation/rules#.22add.22rules了解更多关于验证插件及其功能的信息

    当然,您可以轻松找到有关 jquery 非公开验证的更多信息并执行您的变体。不过要记住的是,您希望客户端和后端验证保持一致,因此如果您从模型中删除 [Required],则必须检查保存/编辑方法中的值。

    【讨论】:

    • 嗯,我有点喜欢,会试一试
    • 我尝试了这种方法,但没有奏效,似乎 DOM 中某处有一个验证元数据变量,该变量是在加载表单时创建的,并且包含有关字段验证的所有信息表单,因此我可以将 that-val 修改为 false,即使我可以删除它,它也不会启用或禁用该字段的验证
    • 似乎在隐藏元素时这不起作用。 In my case I have the required element in a tab and when another tab is selected and I click on save the validation of that element doesnt work, is skipping it.
    【解决方案2】:

    看看用foolproof有一个RequiredIf属性

    private class Person
    {
      [Required]
      public string FirstName { get; set; }
    
      [Required]
      public string LastName { get; set; }
    
      public bool Married { get; set; }
    
      [RequiredIfTrue("Married")]
      public string MaidenName { get; set; }
    }
    

    【讨论】:

    • 这看起来很不错,但我不想把它添加到我的项目中,这是一个单一的场景。
    • 看看源代码,它会让你知道如何继续
    【解决方案3】:

    试试看这里,这应该会为您指明正确的方向。

    http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

    【讨论】:

      【解决方案4】:

      由于您没有发布任何代码,我假设您的单选按钮字段的 ID 为 rdbRequired,而您的字段名称为 MyField

      根据需要最初标记MyField

      然后在你的控制器中,这样写:

       public ActionResult Index(MyModel model)
          {
             // If the radio button is not selected, MyField is marked as not required. I mean it is not validated
             if (model.rdbRequired == false)  
             {
                  ModelState.Remove("MyField"); 
             }
             if(ModelState.IsValid){
             //do something
             }
             else{
                   return View(model);
             }
          }
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2016-04-03
        • 2013-08-11
        • 1970-01-01
        • 2012-05-12
        • 2014-11-18
        • 2013-04-16
        • 2011-06-08
        • 1970-01-01
        • 2015-08-17
        相关资源
        最近更新 更多