2014-10-21 5 views
1

일부 컨트롤이있는 부분보기가 있습니다. 그 중 하나는 DateTime 값을 입력하는 데 사용되는 텍스트 상자입니다. datetime 텍스트 상자는 readonly이고 type 속성은 text입니다 (브라우저 날짜 선택기 팝업이 표시되지 않도록하기 위해). 모델 클래스의 DateTime 속성은 무시할 수없고 고유하지 않습니다. nullable 일 수 없습니다.부분보기에서 DateTime 텍스트 상자의 완고한 기본값을 제거 - Asp.net MVC 5

텍스트 상자가 읽기 전용이므로, datepicker 팝업에서 텍스트 상자를 클릭하고 관련 날짜를 선택하여 timepicker addon과 함께 jQuery Datepicker를 사용하여 DateTime 값을 입력합니다.

중요 : 부분 뷰는 일반 뷰에 포함되어 있지만 렌더링되지 않습니다. 부분 뷰 (실제로는 양식)는 사용자가 일반 뷰에서 조치 링크를 클릭하면 jQuery 모달에 표시됩니다. 부분보기는 Html.Action 메소드로 포함됩니다.

모든 것이 제대로 작동합니다. 그러나 jQuery 모달에 부분 뷰가 표시되면 DateTime 텍스트 상자에 자리 표시 자 텍스트 Monday 01, January, 0001이 표시됩니다.

DateTime 컨트롤이있는 응용 프로그램의 다른 페이지에서 "text"로 type 속성을 변경하고 @placeholder ="Select date"으로 HTML 자리 표시자를 추가하는 것만으로도 작업이 수행되지 않았습니다.

모든 지원은

감사 제목 편집 될 것이다 : 변경 "자리"에서 "기본값"

모델

[Index(IsUnique = true)] 
    [DataType(DataType.Date)] 
    [DisplayFormat(DataFormatString = "{0:dddd dd, MMMM, yyyy HH:mm}", ApplyFormatInEditMode = true)] 
    [Display(Name = "Record Date")] 
    public DateTime RecordDate { get; set; } 

컨트롤러

//[HttpPost] 
    //[ValidateAntiForgeryToken] 
    public ActionResult CreateNewRecordOnPopup([Bind(Include = "RecordID,RecordDate,TeamPeriodID,TeamOnDutyID")] Record record) 
    { 
     ViewBag.TeamOnDutyID = new SelectList(db.TeamOnDutys, "TeamOnDutyID", "Name"); 

     ViewBag.TeamPeriodId = new SelectList(db.TeamPeriods, "TeamPeriodID", "Name"); 
     return PartialView("_CreateNewRecordOnPopupPV", record); 
    } 

부분보기 정상에서

@Html.Action("CreateNewRecordOnPopup", "Records")

부분보기 w

@Html.EditorFor(model => model.RecordDate, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly", @type = "text", placeholder = "Select date" } })

답변

3

1/1/0001 12:00:00 AM입니다 default(DateTime)의 기본값과 함께 제공 귀하의 DateTime 속성이 아닌 널 (NULL)입니다. 자리 표시자가 아닙니다. 문자 그대로 으로 설정해야하기 때문에 문자 그대로 초기 값입니다.

DateTimeDateTime?과 같이 사용할 수있게 설정하십시오. 필요한 경우 [Required]으로 꾸미면 무언가에 적용되도록 설정할 수 있습니다. 그러나 그것은 nullable이기 때문에 기본값은 null이거나 빈 문자열입니다.

+0

안녕하세요. 텍스트 상자 컨트롤이 일반보기에서 렌더링 될 때 표시되지 않으며 placeholder = "Select date"}})를 사용하여 모든 자리 표시자를 사용할 수 있습니다. 그러나 부분보기에서는 작동하지 않습니다. – moe

+2

다시, 이것은 placeholder가 아닙니다. * 실제 속성 값 *입니다. 왜 당신이 다른 시나리오에서 이것을 경험하지 못했을 지 확신하지 못합니다. 그러나 제가 여기서 말한 것은 확실히 당신의 문제이며, 제가 준 해결책은 그것을 해결하는 확실한 방법입니다. –

+0

귀하의 답변에 의해 문제가 해결되었지만 유효성 확인 텍스트가 항상 표시되었으므로 ModelState를 호출하여이 텍스트를 지워야했습니다.부분보기 컨트롤러에서 지우기()를 클릭합니다. 고맙습니다. – moe