2017-03-24 9 views
-1

私は2つのフィールドを持つビューを持っています。必要なフィールド検証は一方では有効であり、他方では有効ではありません。何か不足していますか?必要なフィールドの妥当性検査を選択的に行う

に動作していない:

<div class="form-group"> 
        <div class="controls"> 
         <label class="control-label" for="Selected Organizations">Selected Organization(s)</label> 
         <div class="panel panel-default"> 
          <div class="panel-body" style="overflow-y: auto; max-height: 100px; min-height:50px" id="divSelOrgs"> 
           @for (int i = 0; Model.Organizations != null && i < Model.Organizations.Count(); i++) 
           { 
            var org = Model.Organizations[i]; 
            var checkedAttr = (org.Id != Guid.Empty) ? "checked='checked'" : ""; 
            <div class="row"> 
             <input type="hidden" name="Organizations.Index" value="@i" /> 
             <input type="hidden" name="Organizations[@i].Name" value="@org.Name" /> 
             <input type="hidden" name="Organizations[@i].Data" value="@org.Data" /> 
             <div class="col-xs-1"> 
              <input type="checkbox" name="Organizations[@i].Id" value="@org.Id" @checkedAttr data-org-selected="true" /> 
             </div> 
             <div class="col-xs-11" data-toggle="tooltip" data-placement="top" title="@org.Data">@org.Name</div> 
            </div> 
           } 
          </div> 
         </div> 
         @Html.ValidationMessageFor(m => m.Organizations) 
        </div> 
       </div> 

ワーキング:

<div class="form-group"> 
       @Html.LabelFor(m => m.FirstName, new { @class = "control-label" }) 
       @Html.TextBoxFor(m => m.FirstName, new { @class = "form-control", placeholder = "First name" }) 
       @Html.ValidationMessageFor(m => m.FirstName) 
</div> 

モデルのコード:

[Required] 
    [Display(Name = "First Name")] 
    public string FirstName { get; set; } 
[Required(ErrorMessage = "The {0} field is required.")] 
    [Display(Name = "Selected Organization(s)")] 
    public List<OrganizationDTO> Organizations { get; set; } 
+0

ご質問は不明であるだろう。 'RequiredList'バリデーションが機能していないということですか?もしそうなら、 'RequiredList'は組み込みのMVCコンポーネントではありません。その属性のソースを確認して、それを正しく使用し、実際に正しく機能することを確認する必要があります。 –

+0

@ChrisPratt私はそれをRequiredに変更しました。検証はまだ機能しません。 – TheFallenOne

+2

必須はリストタイプでは機能しません。基本的には、リストのプロパティ自体が存在する必要があります。必ずしも1つ以上のアイテムがある必要はなく、空の場合でも常に存在します。 –

答えて

1

dataannotationlistタイプでは動作しませんが、あなたがvalidationためcustom attributeでリストを検証することができます

public class RequiredListAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object list) 
    { 
     var list = list as IList; 
     if (list != null) 
     { 
      return list.Count > 0; 
     } 
     return false; 
    } 
} 

とあなたの財産は

[RequiredList(ErrorMessage = "The field is required.")] 
public List<OrganizationDTO> Organizations { get; set; } 
+0

これは通常のデータアノテーションと同様に動作し、クライアント側で検証エラーをキャッチしますか? –

関連する問題