2017-01-13 3 views
0

Ich habe eine benutzerdefinierte Datum Validierung und ich habe getan, wie in this Link erläutert. Unten ist mein Modell Code:ValidationMessage in MVC Ansicht nicht angezeigt

[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; } 

` Unten ist mein Code in Aussicht:

<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" })

Unter meinen Code in Controller ist:

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"); 

Selbst obwohl ich versucht habe, die Validierungsnachricht anzuzeigen Wie in der Modellklasse erwähnt, erhalte ich nur Sternbilder anstelle der Validierungsnachrichten. Die in der Validierungszusammenfassung angegebenen Fehlermeldungen werden jedoch angezeigt. Aber ich möchte die Nachrichten in der Modellklasse anzeigen. Irgendeine Ahnung?

Antwort

0

Ich entfernte das Sternsymbol auf der ValidationMessageFor in View. Es fing an zu arbeiten. Kann für jemanden hilfreich sein.

0

Das ValidationResult-Attribut Ihres Attributs hat keinen Schlüssel, der mit einem Feld verknüpft ist, wodurch ValidationMessageFor nicht funktioniert.

Ich würde vorschlagen, die Implementierung der IValidatable-Schnittstelle auf Ihrem ViewModel anstelle Ihres benutzerdefinierten Datenvalidierungsattributs, es sei denn, es gibt viele Stellen in Ihrer Anwendung, wo diese Art der Validierung erforderlich ist.

Sie werden feststellen, dass es den Namen der Eigenschaft als Schlüssel liefert den Fehler mit dem Feld zu verknüpfen:

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) }); 
     } 
    } 
Verwandte Themen