MVC 4,仅在显示TextBox时验证

时间:2013-11-07 16:13:10

标签: c# javascript html asp.net-mvc

我有一个模特:

[Required(ErrorMessage = "Dit veld is verplicht")]
[Range(60, 60000, ErrorMessage = "De waarde moet tussen de 60 en 60000 liggen")]
public double? Kilometers { get; set; }

[Required(ErrorMessage = "Dit veld is verplicht")]
public int? Minutes { get; set; }

我的HTML:

<div class="control-group container-trigger" id="container-distance">
  <label class="control-label" for="trigger-distance">Aantal kilometers</label>
  <div id="distance" class="controls">
    @Html.TextBoxFor(m => m.Alert.Kilometers, new { id = "trigger-distance", @name = "trigger-distance" })
    @Html.ValidationMessageFor(m => m.Alert.Kilometers, "", new { @class = "error-0" })
  </div>
</div>
<div class="control-group container-trigger" id="container-minutes">
  <label class="control-label" for="trigger-minutes">Aantal minuten</label>
  <div id="minutes" class="controls">
     @Html.TextBoxFor(m => m.Alert.Minutes, new { id = "trigger-minutes", @name = "trigger-minutes" })
     @Html.ValidationMessageFor(m => m.Alert.Minutes, "", new { @class = "error-0" })
   </div>
</div>

我有一个下拉列表,如果我做出选择,我需要它来显示一个文本框。如果我选择第一个选项,它将显示一个文本框几分钟。如果我选择第二个选项,它将显示距离的文本框。我所拥有的是,如果我单击提交按钮,我会收到表单中未显示的文本框的验证错误,但只有在显示它们时才需要它们!

我该怎么做才能解决这个问题?

3 个答案:

答案 0 :(得分:1)

条件验证将帮助您实现所需的http://foolproof.codeplex.com/

答案 1 :(得分:0)

您已使用[required]属性进行了所需操作。因此,如果您没有为其中任何一个设置值,它将抛出客户端验证。 您必须删除“required”属性或从html中删除“ValidationMessageFor”

答案 2 :(得分:0)

我假设您使用jquery进行不显眼的验证?如果是这样,您可以使用$ .validator.defaults.ignore属性指定在验证期间应忽略的任何选择器,例如:

$.validator.defaults.ignore = ':disabled,:hidden,.ignore';

请确保在此处展开​​与隐藏控件相匹配的内容。