简体   繁体   English

验证对象列表-毫不客气的ASP.NET MVC 3 C#

[英]Validating a list of objects - unobtrusively ASP.NET MVC 3 C#

This seem like it should be easy to implement but I am finding it challenging. 这似乎很容易实现,但我发现它具有挑战性。 I have a list of objects in my view model that need to be validated, unobtrusively. 我的视图模型中有一个对象列表,需要不加干扰地进行验证。

I have looked at FluentValidation for this yet there seems to be a bug in the collections validation implementation that does not fire the unobtrusive validator. 我已经查看过FluentValidation,但是在集合验证实现中似乎存在一个错误,该错误不会触发不显眼的验证器。 Not sure if there is a way to use Data Annotations for a list of objects where the validation will happen unobtrusively (and server-side) 不知道是否有一种方法可以将数据注释用于对象列表,在该对象列表中,验证不会引起干扰(和服务器端)

I am looking for suggestions on how to do this. 我正在寻找有关如何执行此操作的建议。 Thanks 谢谢

The object 物体

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

I declare the list of NewClubSponsor objects in my View Model 我在视图模型中声明了NewClubSponsor对象的列表

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

The View 风景

<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=\""+@sponsorDivId+"\" 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>

You can add Data Annotation in the object that the list is composed of. 您可以在列表所组成的对象中添加数据注释。 This will add the data-valid and requerire attributes... 这将添加data-valid和requerire属性...

But, if the list is created on the fly, you will need to bind the validation logic once you add a new item in the form (if you are adding it via JS). 但是,如果列表是动态创建的,则一旦在表单中添加新项(如果通过JS添加),就需要绑定验证逻辑。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM