2017-01-13 42 views
0

私はカスタム日付のバリデーションを持っており、 thisのリンクで説明した通りです。以下は私の機種コードです:MVCビューのValidationMessageが表示されない

以下
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",ApplyFormatInEditMode=true)] 
    [DisplayName("Sch.Start Date:")] 
    [DataType(DataType.Date)] 
    [ValidProjectDate(ErrorMessage="Project Start Date cannot be greater than Project End Date.")] 
    public DateTime? ProjectScheduleStartDate { get; set; } 

    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
    [DisplayName("Sch.End Date:")] 
    [DataType(DataType.Date)] 
    [ValidProjectDate(ErrorMessage = "Project End Date cannot be less than or Equal to Current Date.")] 
    public DateTime? ProjectScheduleEndDate { get; set; } 

` は、ビューの私のコードです:以下

<div class="form-group"> 
 
      @Html.LabelFor(model => model.ProjectScheduleStartDate, htmlAttributes: new { @class = "control-label col-md-2" }) 
 
      <div class="col-md-10"> 
 
       @Html.EditorFor(model => model.ProjectScheduleStartDate, new { htmlAttributes = new { @class = "form-control" } }) 
 
       @Html.ValidationMessageFor(model => model.ProjectScheduleStartDate, "*", new { @class = "text-danger" }) 
 
      </div> 
 
     </div> 
 

 
     <div class="form-group"> 
 
      @Html.LabelFor(model => model.ProjectScheduleEndDate, htmlAttributes: new { @class = "control-label col-md-2" }) 
 
      <div class="col-md-10"> 
 
       @Html.EditorFor(model => model.ProjectScheduleEndDate, new { htmlAttributes = new { @class = "form-control" } }) 
 
       @Html.ValidationMessageFor(model => model.ProjectScheduleEndDate, "*", new { @class = "text-danger" }) 
 
      </div> 
 
     </div> 
 
<hr/> 
 
    @Html.ValidationSummary(true, "Please correct below errors", new { @class = "text-danger" })

コントローラの私のコードです。でも

if (ModelState.IsValid) 
     { 
      ProjectManager pm = new ProjectManager(); 
      pm.AddProjects(prj); 
      ViewBag.Result = "Record Inserted Successfully."; 
      ModelState.Clear(); 

     } 
     else 
     { 
      ModelState.AddModelError(string.Empty, "An Error has happened"); 
     } 

     return View("AddNewProject"); 

私は検証メッセージを表示しようとしましたがモデルクラスで述べたように、私は検証メッセージの代わりに星の画像しか得ていません。ただし、検証サマリで指定されたエラーメッセージが表示されています。しかし、モデルクラスにメッセージを表示したい。どんな手掛かり?

答えて

0

ViewのValidationMessageForでスターシンボルを削除しました。それは働き始めた..誰かに役立つかもしれない。

0

属性のValidationResultには、フィールドに関連付けられたキーがありません。これにより、ValidationMessageForが機能しなくなります。

このタイプの検証が必要なアプリケーションがたくさんある場合を除き、カスタムデータ検証属性の代わりにViewModelでIValidatableインターフェイスを実装することをお勧めします。

あなたはそれがフィールドにエラーを関連付けるためのキーとしてプロパティの名前を提供していることがわかります:

public class TestViewModel : IValidatableObject 
    { 
     public DateTime? ProjectStartDate { get; set; } 
     public DateTime? ProjectEndDate { get; set; } 

     public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
     { 
      if (ProjectStartDate > ProjectEndDate) 
       yield return new ValidationResult("The Project Start Date cannot be after the Project End Date.", new List<string>() { nameof(ProjectStartDate) }); 
      if (ProjectEndDate < DateTime.Now) 
       yield return new ValidationResult("Project End Date cannot be less than or Equal to Current Date.", new List<string>() { nameof(ProjectEndDate) }); 
     } 
    } 
関連する問題