Dyskretna walidacja dla nieodebranego datepicker'a działa, działa dla inline Datepicker

Nie użyłem datepicker jquery.ui, ponieważ musiałem wybrać cały tydzień i wiele dat w różnych warunkach, więc używamKeith Wood's datepicker w szablonie EditorTemplate dla moich pól Data:

    @model Nullable<DateTime>
    @{
        string name = ViewData.TemplateInfo.HtmlFieldPrefix;
        string id = name.Replace(".", "_");
        string dt = Model.HasValue ? String.Format("{0:d}",(string)Model.Value.ToShortDateString()) : string.Empty;
    }        
    @Html.TextBox("", dt, new { @class = "datefield", @type = "date", @id = id })
    <script type="text/javascript">
        $(document).ready(function () {
            $('#@id').datepick({
                renderer: $.datepick.themeRollerRenderer,
                multiSelect: 999
            });
        });    
    </script>

Sprawdzanie poprawności działa dobrze, gdy używa się pola tekstowego i ma pop-up datepicker; ale tak naprawdę chcę użyć wbudowanego datepicker'a, ale nie mogę uzyskać walidacji do działania w następujących warunkach:

    @model Nullable<DateTime>
    @{
        string name = ViewData.TemplateInfo.HtmlFieldPrefix;
        string id = name.Replace(".", "_");
        string dt = Model.HasValue ? String.Format("{0:d}",(string)Model.Value.ToShortDateString()) : string.Empty;
    }

    <div class="kwdp">
    </div>
    @Html.Hidden("", dt, new { @class = "datefield", @id = id })
    <script type="text/javascript">
        $(document).ready(function () {
            $('.kwdp').datepick({
                renderer: $.datepick.themeRollerRenderer,
                multiSelect: 999
            });
        });    
    </script>

Oto fragment mojego niestandardowego sprawdzania poprawności po stronie klienta:

    form.validate({ 
        rules:{
            StartDate: { 
                required: true, 
                dpDate: true 
            }
        },
        messages: {
            StartDate: 'Please enter a valid date (dd-mm-yyyy)'
        }
    });

A oto definicja pola DateTime w mojej klasie danych:

    [Required]
    [DataType(DataType.Date)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy}")]
    public Nullable<DateTime> StartDate { get; set; }

Rozumiem, że powinienem dodać opcję onSelect, aby datepicker wypełnił ukryte pole datą, ale niezależnie od tego powinienem otrzymać błąd, gdy wartość ukrytego pola jest pusta, ale nie jest sprawdzana. Znaczniki HTML są renderowane w następujący sposób:

    <input name="StartDate" class="datefield" id="StartDate" type="hidden" data-val-required="The StartDate field is required." data-val="true" data-val-date="The field StartDate must be a date." value=""/>

Używam następujących bibliotek:

    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>    
    <script src="@Url.Content("~/Scripts/datepick/jquery.datepick.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/datepick/jquery.datepick.ext.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/datepick/jquery.datepick.validation.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.ui.datepicker.validation.min.js")" type="text/javascript"></script>

znalazłempodobne pytanie bez odpowiedzi wygląda na to, że deweloper ma ten sam problem, ale nie opublikował rozwiązania. Jakieś pomysły, gdzie się mylę?

questionAnswers(2)

yourAnswerToTheQuestion