Пользовательский атрибут ValidationAttribute в PartialView не отображает сообщения об ошибках

Я разработал концепцию пользовательской проверки с использованием ValidationAttribute на простом сайте mVC, проверяя диапазон дат. Интересует только то, что finishDate был до startDate. И все работало нормально. Ну, у меня нет проверки клиента, но на стороне сервера работает гладко. Все идет нормально.

Моя проблема сейчас в том, что в моем реальном решении у меня есть форма как частичное представление. Scneario представляет собой форму резюме, где вы можете создать несколько рабочих мест. Я включаю _CreatejobExperience частичное представление в родительский iew и показываю его с помощью плагина bquopup jquery.

Я реализовал все таким же образом, как я сделал с моим небольшим доказательством концепции, которая работала. но если при проверке произошел сбой, но всплывающее окно не закрылось, сообщение об ошибке не отображается.

Мой класс проверки

public class DateRangeAttribute : ValidationAttribute
{
    public string[] PropertyNames { get; set; }

    public DateRangeAttribute(params string[] propertyNames)
    {
        this.PropertyNames = propertyNames;
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var properties = this.PropertyNames.Select(validationContext.ObjectType.GetProperty);
        var values = properties.Select(p => p.GetValue(validationContext.ObjectInstance, null)).OfType<DateTime>();

        var startDate = values.FirstOrDefault();
        var finishDate = (DateTime)value;

        if (finishDate <= startDate)
        {
            return new ValidationResult("La fecha final debe ser posterior ala fecha de inicio");
        }
        return null;
    }
}

Свойства и декоратор настроены так

    [Display(Name = "Entry date")]
    [DataType(DataType.Date)]
    [Required]
    public DateTime EntryDate { get; set; }

    [Display(Name = "Finish date")]
    [DataType(DataType.Date)]
    [Required]
    [DateRange("EntryDate", ErrorMessage="Error message")]
    public DateTime RetirementDate { get; set; }

И в моем контроллере у меня есть действие, которое работает на форме сообщения, как это

    [HttpPost]
    public PartialViewResult AddJobExperience(JobExperienceViewModel jobExperience)
    {
        if (ModelState.IsValid)
        {
            var resume = (ResumeViewModel)Session["tempResume"];
            resume.JobExperienceViewModels.Add(jobExperience);
            Session["tempResume"] = resume;
            return PartialView("_ListJobExperience", resume.JobExperienceViewModels);
        }
        else
        {
            return PartialView("_CreateJobExperience");
        }

    }

В моем доказательстве концепции, в моем контроллере у меня есть что-то вроде,

[HttpPost]
public PartialViewResult Index(ValidationModel model)
{
    if(ModelState.IsVaid)
    {
      return RedirectToAction("Index", "Home");
    }
    else
    {
         return View();
    }
}

Я думаю, что проблема в возвращении. Как я могу сделать сообщение об ошибке, которое будет показано в частичном представлении.

ОБНОВИТЬ

Родительское представление является индексным представлением контроллера и выглядит примерно так. Я только что удалил не соответствующие части

@using CAEWebSite.Models
@model CAEWebSite.Models.ResumeViewModel

@{ 
ViewBag.Title = "Hoja de Vida";
}

<div class="row">



@using (Ajax.BeginForm("Index", null, null, new { @class = "form-horizontal", role = "form" }))
    {
        @Html.AntiForgeryToken()


        <h4>
            @{var fullName = Model.FirstName +
          (!String.IsNullOrWhiteSpace(Model.MiddleName) ? " " + Model.MiddleName : String.Empty) +
          (!String.IsNullOrWhiteSpace(Model.LastName) ? " " + Model.LastName : String.Empty) +
          (!String.IsNullOrWhiteSpace(Model.SecondLastName) ? " " + Model.SecondLastName : String.Empty);
            }
            @fullName
        </h4>
        <hr />
        @Html.ValidationSummary(true)

        <div class="form-group">
            <div class="col-md-12">
                @Model.Email
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-12">
                @Model.UserName
            </div>
        </div>
        <hr />
        <h4>Job experiences</h4>
        <div class="col-md-12">
            <div id="divListJobExperience">
                @Html.Partial("_ListJobExperience", Model.JobExperienceViewModels)
            </div>
            <p>
                <a href="#" onclick="$('#newJobExperience').bPopup(); return false;">Nueva experiencia</a>
            </p>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>

    }

<div id="newJobExperience" style="background-color:#fff; border-radius:5px;width:60%;">
    <div class="col-md-12">
        @Html.Partial("_CreateJobExperience", new JobExperienceViewModel())
    </div>
</div>
<div>
    @Html.ActionLink("Volver a la Lista", "Index", "SearchClient")
</div>
</div>

0 ответов

Другие вопросы по тегам