jQuery datepicker วันที่เริ่มต้นเป็นโมฆะใน postback

ฉันมีแบบจำลองที่มีลักษณะดังนี้:

public class RegisterResultAdminModel
{
    [DateInThePastValidator(ErrorMessage = "Date needs to be a valid date set in the past.")]
    [Required(ErrorMessage = "You need to set Date.")]
    public DateTime DatePlayed { get; set; }
}

เครื่องมือตรวจสอบของฉันมีลักษณะดังนี้:

public class DateInThePastValidator : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var date = (DateTime)value;
        if (date > DateTime.UtcNow)
            return false;
        return true;
    }
}

ฉันตั้งค่า DatePlayed เป็น DateTime.Today ในวิธี Index ของคอนโทรลเลอร์:

...
model.DatePlayed = DateTime.Today;
return View(model);

ใน Index.cshtml ของฉัน ฉันมีรหัสต่อไปนี้:

@model Web.Models.RegisterResultAdminModel
...
<p>@Html.TextBoxFor(m => m.DatePlayed, new { @Value = Model.DatePlayed, id = "datepicker" })</p>
...
<script>
$(function() {
    $("#datepicker").datepicker({ dateFormat: 'dd-MM-yy'});
});
</script>

TextBoxFor อยู่ภายใน Html.BeginForm

ตกลง เตรียมพร้อมสำหรับปัญหาของฉันตอนนี้ เมื่อเพจแสดง วันที่จะแสดงเป็น 09/14/2017 00:00:00 ยุติธรรมเพียงพอ แต่เมื่อฉันคลิกส่ง เครื่องมือตรวจสอบจะแสดงค่าเป็นโมฆะ (ฉันเห็นได้ในดีบักเกอร์) อย่างไรก็ตาม หากฉันคลิก datepicker ก่อน แล้วเลือกวันที่ที่จะแสดงเป็น 14-September-2017 ตอนนี้เมื่อฉันคลิกส่ง เครื่องมือตรวจสอบจะยอมรับวันที่ (ตอนนี้ตัวดีบั๊กจะแสดงวันที่) และทุกอย่างทำงานได้ดี

มีบทความมากมายเกี่ยวกับเรื่องที่ดูคล้ายกันมาก แต่ฉันต้องขาดอะไรบางอย่างที่ชัดเจนไป

ฉันจะทำให้งานนี้สำเร็จได้อย่างไร?

แก้ไข: การเพิ่มคำอธิบายเป็น "แสดงเป็นโมฆะ"


person Halvard    schedule 14.09.2017    source แหล่งที่มา
comment
ไม่เกี่ยวข้อง แต่ลบ new { @Value = Model.DatePlayed } ที่ไม่มีจุดหมายออก และอย่าพยายามแทนที่แอตทริบิวต์ value เมื่อใช้วิธีการ HtmlHelper   -  person    schedule 14.09.2017
comment
มันไม่ชัดเจนจริงๆ ว่าคุณถามอะไร คุณหมายถึงอะไร เครื่องมือตรวจสอบความถูกต้องแสดงค่าเป็นโมฆะ พร็อพเพอร์ตี้ของคุณคือ DateTime และหากเป็น null คุณจะได้รับข้อผิดพลาดอื่นก่อน และการโพสต์วันที่ของคุณในรูปแบบที่ไม่ตรงกับวัฒนธรรมเซิร์ฟเวอร์ของคุณดังนั้นจึงไม่สามารถผูกมัดได้   -  person    schedule 14.09.2017
comment
model.DatePlayed = DateTime.Today; › model.DatePlayed = DateTime.Now;   -  person Animus Miles-Militis    schedule 14.09.2017
comment
@StephenMuecke การลบ ´@Value= Model.DatePlayed´ ทำให้ปัญหาหมดไป ตอนนี้ในการดีบัก ฉันเห็นวันที่ บางทีคุณควรโพสต์สิ่งนี้เป็นคำตอบ?   -  person Halvard    schedule 14.09.2017
comment
มีข้อความอื่นๆ อีกสองสามข้อที่คุณทำซึ่งไม่สมเหตุสมผล (หรือฉันไม่เข้าใจ) และเพื่อเป็นหมายเหตุด้านข้าง คุณสามารถใช้ @Html.TextBoxFor(m => m.DatePlayed, "{0:dd-MMMM-yyyy}", new { id = "datepicker" }) เพื่อจัดรูปแบบการแสดงผลเริ่มต้นได้ แต่ฉันต้องการนอนหลับ ดังนั้นอย่าลังเลที่จะเพิ่มคำตอบของคุณเอง   -  person    schedule 14.09.2017
comment
@AnimusMiles-Militis ไม่ใช่ DateTimeวันนี้วันที่ของวันนี้ลบชั่วโมงและนาที? และด้วยเหตุนี้ DateTime.Now › DateTime.Today?   -  person Halvard    schedule 14.09.2017
comment
คุณจำเป็นต้องตั้งค่าหากคุณมีผลผูกพันหรือไม่? @Value = Model.DatePlayed   -  person Animus Miles-Militis    schedule 18.09.2017
comment
@ AnimusMiles-Militis ไม่ อันที่จริงมันผิดและนำไปสู่ปัญหาอื่น ๆ StephenMuecke ชี้ให้เห็นข้างต้น ฉันแนะนำให้เขาโพสต์มันเป็นคำตอบ   -  person Halvard    schedule 20.09.2017


คำตอบ (1)


เพียงเพื่อให้ได้รับคำตอบ จึงมีคำตอบที่ถูกต้อง:

Stephen Muecke ชี้ให้เห็นอย่างถูกต้องว่าฉันไม่ควรตั้งค่า new { @Value = Model.DatePlayed } ปัญหารูปแบบวันที่ของฉันหายไปเมื่อฉันใช้คำแนะนำที่สองของเขา:

Html.TextBoxFor(m => m.DatePlayed, "{0:dd-MMMM-yyyy}", new { id = "datepicker" })

หลังจากสิ่งนี้ก็ใช้งานได้ ขอบคุณสำหรับความช่วยเหลือ!

person Halvard    schedule 21.09.2017