c# - MVC4中基于下拉选择的FluentValidation Rule依赖验证

标签 c# validation asp.net-mvc-4 fluentvalidation

我需要根据下拉选择验证两个文本框。它是依赖性验证。为此,我正在使用 FluentValidation。关键在这里,下拉列表的值是语言规范。 (俄罗斯、西类牙语)。

RuleFor(x => x.HasMaterialPublishedElseWhereText).NotEmpty().WithMessage(i18n_Models_Abstract.RequiredField);
RuleFor(x => x.DtPublishedTimeText).NotEmpty().When(x => x.HasMaterialPublishedElseWhereText == i18n_Models_Abstract.AbstractYes).WithMessage(i18n_Models_Abstract.RequiredField);
RuleFor(x => x.PublishedPlaceText).NotEmpty().When(x => x.HasMaterialPublishedElseWhereText == i18n_Models_Abstract.AbstractYes).WithMessage(i18n_Models_Abstract.RequiredField);

查看

 <div class="row" style="padding-bottom: 10px">
  <div class="col-md-10">
   <div class="col-md-4">
      @Html.HiddenFor(model => model.HasMaterialPublishedElseWhereOptions)
      @{
           options = Model.HasMaterialPublishedElseWhereOptions;
           optionsList = options.Split(',').ToList();
           optionSelect = optionsList.Select(option => new SelectListItem() { Text = option, Value = option }).ToList();
        }
        @Html.DropDownListFor(model => model.HasMaterialPublishedElseWhereText, optionSelect, i18n_Models_Abstract.SelectOption +"...", new { @class = "input-validation-error form-control" })
        @Html.ValidationMessageFor(model => model.HasMaterialPublishedElseWhereText)
    </div>
   </div>
 </div>
 <div class="row" style="padding-bottom: 10px">
   <div class="col-md-10">
     <div class="col-md-4">
        @Html.TextBoxFor(model => model.DtPublishedTimeText, new { @class = "form-control", @placeholder = Model.DtPublishedTimeLabel, maxlength = 40 })
        @Html.ValidationMessageFor(model => model.DtPublishedTimeText)
      </div>
 </div>
</div>
<div class="row" style="padding-bottom: 10px">
  <div class="col-md-10">
     <div class="col-md-4">
         @Html.TextBoxFor(model => model.PublishedPlaceText, new { @class = "form-control", @placeholder = Model.PublishedPlaceLabel, maxlength = 40 })
          @Html.ValidationMessageFor(model => model.PublishedPlaceText)
      </div>
   </div>
</div>

HTML

  <div class="col-md-4">
       <input id="HasMaterialPublishedElseWhereOptions" name="HasMaterialPublishedElseWhereOptions" type="hidden" value="да/yes,нет/no">
       <select class="input-validation-error form-control" data-val="true" data-val-required="обязательное поле" id="HasMaterialPublishedElseWhereText" name="HasMaterialPublishedElseWhereText">
    <option value="">Выбрать опции...</option>
    <option selected="selected" value="да/yes">да/yes</option>
    <option value="нет/no">нет/no</option>
</select>
    <span class="field-validation-valid" data-valmsg-for="HasMaterialPublishedElseWhereText" data-valmsg-replace="true"></span>
  </div>
  <div class="col-md-4">
     <input class="form-control" id="DtPublishedTimeText" maxlength="40" name="DtPublishedTimeText" placeholder="Если Да, укажите дату публикации/If yes, Date" type="text" value="">
     <span class="field-validation-valid" data-valmsg-for="DtPublishedTimeText" data-valmsg-replace="true"></span>
   </div>
<div class="col-md-4">
    <input class="form-control" id="PublishedPlaceText" maxlength="40" name="PublishedPlaceText" placeholder="" type="text" value="">
    <span class="field-validation-valid" data-valmsg-for="PublishedPlaceText" data-valmsg-replace="true"></span>
  </div>

enter image description here

所有其他验证都有效,除了这个依赖项不起作用?有什么不对吗?

最佳答案

依赖验证不会生成适当的 html 属性,因为依赖值(true 或 false)只有在用户输入后才能知道。

既不是 jquery.validate 框架(基于客户端验证),也不是 MVC 模型元数据基础设施(用于可以转换为客户端的简单规则)边规则),不支持多个属性集,因此,MVC 基础结构决定根本不生成任何属性。

同样的逻辑适用于规则集定制:在指定规则集下定义的规则不参与验证属性生成。

关于c# - MVC4中基于下拉选择的FluentValidation Rule依赖验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23998752/

相关文章:

c# - 我的 C# 代码无法发送邮件,但 outlook 2k7 可以

c# - 将 3D 点映射到 2D 上下文

php - 在 PHP 中验证选择下拉数组

c# - 将 @Html.Raw 转换为 ASP.NET MVC 4 Razor 中的字符串

c# - 如何在同一项目中使用 MVC Controller 和 WebAPI Controller

使用 Npgsql for Postgresql 的 C# 查询显示重复的结果和缺失的表数据

c# - 接口(interface)实现两次 "types may unify";为什么此解决方法有效?

javascript - 在 JSF 中提交表单后 MaskInput 不起作用

php - 文件类型 PHP 验证

c# - 启动一个MVC4基础模板项目