ฉันมีแบบจำลองที่มีลักษณะดังนี้:
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 ตอนนี้เมื่อฉันคลิกส่ง เครื่องมือตรวจสอบจะยอมรับวันที่ (ตอนนี้ตัวดีบั๊กจะแสดงวันที่) และทุกอย่างทำงานได้ดี
มีบทความมากมายเกี่ยวกับเรื่องที่ดูคล้ายกันมาก แต่ฉันต้องขาดอะไรบางอย่างที่ชัดเจนไป
ฉันจะทำให้งานนี้สำเร็จได้อย่างไร?
แก้ไข: การเพิ่มคำอธิบายเป็น "แสดงเป็นโมฆะ"
new { @Value = Model.DatePlayed }
ที่ไม่มีจุดหมายออก และอย่าพยายามแทนที่แอตทริบิวต์value
เมื่อใช้วิธีการHtmlHelper
- person   schedule 14.09.2017DateTime
และหากเป็นnull
คุณจะได้รับข้อผิดพลาดอื่นก่อน และการโพสต์วันที่ของคุณในรูปแบบที่ไม่ตรงกับวัฒนธรรมเซิร์ฟเวอร์ของคุณดังนั้นจึงไม่สามารถผูกมัดได้ - person   schedule 14.09.2017@Html.TextBoxFor(m => m.DatePlayed, "{0:dd-MMMM-yyyy}", new { id = "datepicker" })
เพื่อจัดรูปแบบการแสดงผลเริ่มต้นได้ แต่ฉันต้องการนอนหลับ ดังนั้นอย่าลังเลที่จะเพิ่มคำตอบของคุณเอง - person   schedule 14.09.2017