客户端验证适用于动态可用的字段

时间:2014-08-21 15:52:03

标签: javascript jquery html asp.net-mvc validation

好的,我一直试图找到一个答案,但这几天都没有成功(在此过程中有一些措辞不当的问题)。因此,如果您知道已经讨论过这个问题的答案,请向我指出。

这是我的问题;  我正在使用一个使用kendo构建的表单(我没有创建它,这是我第一次使用kendo)。设计的一部分需要2个或更多可选字段,这些字段仅在满足条件时出现。例如,如果有人选择" 2部分组合"或" 3部分组合"在下拉菜单中,然后会显示适当数量的其他下拉项目,供用户定义其组合的不同部分。现在,这些额外的下拉菜单一直存在于页面上,只是在可见或隐藏之间切换。 但是当它们被隐藏时,它们的值也是空的。

我需要让这些字段仅在需要时才会被验证,而不是在不可用时进行验证。

这是一个代码示例,用于确定字段是可见还是隐藏

    @model PhoenixOnlineMVC.Areas.EventManagement.Models.CompetitionPlannedElementItem
<script type="text/javascript">
@Html.Raw(Model.Code)
</script>
<tr style="vertical-align: top;">
<td>@Model.Index</td>
<td>@(Html.Kendo().DropDownListFor(m => m.SelectedTypeId)
          .HtmlAttributes(new { style = "width:120px" })
          .DataTextField("Text")
          .DataValueField("Value")
          .BindTo(Model.Types)
          )</td>
<td>@(Html.Kendo().DropDownListFor(m => m.SelectedElementId)
           .HtmlAttributes(new { style = "width:160px" })
           .DataTextField("Text")
           .DataValueField("Value")
           .Events(events => events.Select(@Model.SelectedFunctionName))
           .DataSource(source => source.Read(read => read.Action("GetCascadeElements", "Event")
                                                           .Data(@Model.DataFunctionName))
                                        .ServerFiltering(true))
           .Enable(false)
           .AutoBind(false)
           .CascadeFrom(@Model.TypeComboBoxName)
           )</td>
<td style="width: 130px; overflow: auto">
    @{
              const string htmlHiddenAttributes = "width:120px; margin: 2px 4px 4px 0; display:none; ";
              const string htmlVisibleAttributes = "width:120px; margin: 2px 4px 4px 0;";

              if (Model.SelectedSuppElementId1 != null) 
                  { 
                      @Html.DropDownListFor(m => m.SelectedSuppElementId1, Model.SuppElements1, new { style = htmlVisibleAttributes })
                  }
              else
                  {
                      @Html.DropDownListFor(m => m.SelectedSuppElementId1, Model.SuppElements1, new { style = htmlHiddenAttributes })
                  }

此代码来自.cshtml文件,该文件由主视图用于创建组件的页面。并且所有这些都包含在主页面上的Html.BeginForm中。

以上代码用于在主视图页面中多次创建SelectedSuppElementId字段的实例

如果您对解决方案没有建议,或许请向我提供其他有用的信息

1 个答案:

答案 0 :(得分:0)

FIDDLE会帮助你吗?

它只是查看css属性显示,并告诉您元素是显示还是隐藏。

JS

$('.hide').on('click', function(){
    $('.hideme').hide();
});
$('.show').on('click', function(){
    $('.hideme').show();
});
$('.validate').on('click', function(){
    $('.putmehere').html('');
    $('.dropdown').each(function(){ 
        if( $(this).css('display') == 'none' )
       {
         $('.putmehere').append('hidden ');
        }
         else
         {
         $('.putmehere').append('shown '); 
         }
    });
});