0

这似乎应该很容易实现,但我发现它具有挑战性。 我有我的视图模型中的对象列表需要验证,不显眼。验证列表的对象 - 不显眼ASP.NET MVC 3 C#

我已经看过FluentValidation这个,但似乎有be a bug in the collections validation实现不会触发不显眼的验证器。不知道是否有一种方法可以使用数据注释 获得不明显的验证发生的对象列表(和服务器端)

我正在寻找关于如何执行此操作的建议。由于

对象

public class NewClubSponsor 
{ 
    public string SponsorContactName { get; set; } 
    public string SponsorContactEmail { get; set; } 
    public string SponsorContactPhone { get; set; } 
} 

我宣布NewClubSponsor对象的名单在我的视图模型

public List<NewClubSponsor> Sponsors { get; set; } 

<div id="addCosponsorSection"> 
    <!-- We have at least 1 existing sponsor --> 
    @if (Model.Sponsors != null) 
    { 
     for (var i = 0; i < Model.Sponsors.Count; i++) 
     { 
      string sponsorDivId = "sponsorclubname" + i.ToString(); 
      string deleteLink = "<a class=\"icon delete cosponsor\" data-attr-divid=\""[email protected]+"\" data-attr-id=" + @Model.Sponsors[i].Id + "></a>"; 

      <div id="@sponsorDivId"> 
       <div class="formColumn1"><label for="sponsorclubname1">Sponsor club name</label></div> 
       <div class="formColumn2">@Html.EditorFor(x => x.Sponsors[i].SponsorContactName) 
        <div class="messageBottom"> 
         @Html.ValidationMessageFor(model => model.Sponsors[i].SponsorContactName) 
        </div> 
        </div> 
       <div class="formColumn3">@Html.EditorFor(x => x.Sponsors[i].SponsorContactEmail) 
         <div class="messageBottom"> 
          @Html.ValidationMessageFor(model => model.Sponsors[i].SponsorContactEmail) 
         </div> 
       </div> 
       <div class="formColumn4">@Html.EditorFor(x => x.Sponsors[i].SponsorContactPhone)@(i > 0 ? Html.Raw(deleteLink) : Html.Raw("")) 
        <div class="messageBottom"> 
          @Html.ValidationMessageFor(model => model.Sponsors[i].SponsorContactPhone) 
        </div> 
       </div> 
      </div> 
      <div class="clear"></div> 

     } 

    } 
    else 
    { 
     <!-- No sponsors added yet. We need at least 1 sponsor --> 
     <div id="sponsorclubname1"> 
      <div class="formColumn1"><label for="sponsorclubname1">Sponsor club name</label></div> 

      <div class="formColumn2">@Html.EditorFor(model => model.Sponsors[0].SponsorContactName) 
       <div class="messageBottom"> 
        @Html.ValidationMessageFor(model => model.Sponsors[0].SponsorContactName) 
       </div> 
       </div> 
      <div class="formColumn3">@Html.EditorFor(model => model.Sponsors[0].SponsorContactEmail) 
       <div class="messageBottom"> 
       @Html.ValidationMessageFor(model => model.Sponsors[0].SponsorContactEmail) 
       </div> 
      </div> 
      <div class="formColumn4">@Html.EditorFor(model => model.Sponsors[0].SponsorContactPhone) 
       <div class="messageBottom"> 
        @Html.ValidationMessageFor(model => model.Sponsors[0].SponsorContactPhone) 
       </div> 
       </div> 
     </div> 
     <div class="clear"></div> 
     <!-- END Static HTML --> 

    } 
</div> 

回答

1

您可以在列表组成的对象中添加数据注释。 这将添加数据有效和请求者属性...

但是,如果列表是在飞行中创建的,则需要绑定验证逻辑,一旦您在表单中添加新项目(如果您通过JS添加它)。

+0

你会提供一个例子吗?不太确定你的意思。类对象的数据注释需要放在视图模型中,而不是放在实际模型本身上,因为不需要该类的所有对象。 – Slinky

+0

在您的NewClubSponsor类中,您应该放置数据注释。然后,用你拥有的东西,并且已经包含了jquery.validate.unobtrusive.js,它应该在客户端工作。 – Romias

+0

我试图保留视图模型中的注释,但它似乎好像是一个对象列表,他们需要进入域模型。 – Slinky

相关问题