MVC - 验证:如果列表包含一个元素 - 那么它不是必需的;如果它有更多 - 那么它们都是必需的

时间:2016-12-13 13:29:42

标签: jquery asp.net-mvc unobtrusive-validation

我从EditApplicationConcessionModel视图模型中获得了一个视图

此视图模型及其他属性具有属性ListAnexes

public List<Anexes> ListAnexes { get; set; }

这是Anexes

public class Anexes
  {

    [Display(Name = "Number", ResourceType = typeof(Resources.Resources))]
    public string ContractAnexesNumber { get; set; }    

    [Display(Name = "Date", ResourceType = typeof(Resources.Resources))]
    public string ContractAnexDate { get; set; }
  }

在我看来,我遍历这个附件列表并呈现部分视图_Anexes,其中显示了附件的时间和数量

<div id="divAnexes">
        @foreach (var item in Model.ListAnexes)
         {
               l.RenderPartial("_Anexes", item);
         }
 </div>
 <div>
      <button class="btn btn-primary" type="button" id="addAnex">ADD</button>
 </div>

这是我的部分视图_Anexes

@model MEMineralResources.Common.Entities.Anexes

@using (Html.BeginCollectionItem("ListAnexes"))
{

    <div class="divAnex">
        <div class="form-group">

            @Html.LabelFor(m => m.ContractAnexesNumber, new { @class = "control-label" })
            @Html.TextBoxFor(m => m.ContractAnexesNumber, new { @class = "form-control" })
            @Html.LabelFor(m => m.ContractAnexDate, new { @class = "control-label" })
            @Html.TextBoxFor(m => m.ContractAnexDate, new { @class = "form-control datepicker" })


            <div id="linkDelte"></div>
        </div>
    </div>
}

你看到我有一个按钮addAnnex,当你点击它时,我向AddAnex动作发出ajax请求,然后将部分视图_Anexes(动作返回)附加到带有其他附件的div (所以你可以填写另一个附件的数据和数量)

 $('#addAnex').on('click', function () {
        $.ajax({
            async: false,
            url: '@Url.Action("AddAnex", "Application")'
        }).success(function (partialView) {
            $('#divAnexes').append(partialView);

        });
    });

以下是AddAnnex操作

public ActionResult AddAnex()
    {
      Anexes anex = new Anexes();
      return PartialView("_Anexes", anex);

    }

问题是:如果列表中只包含一个Anexes项,那么它的编号和日期不是强制性的。但很明显,如果单击“添加”按钮,则必须填写附件的数字和日期!而且我想不出适合这种情况的自定义验证

1 个答案:

答案 0 :(得分:0)

我认为最好的选择是使用remote data annotation并在其上加上一些逻辑来检查Anexes否是否多于一个,然后应用验证。