2012-12-10 4 views
0

사용자가 두 달력에서 공휴일 (시작 날짜 및 종료 날짜)을 선택하면 처음부터 끝까지의 날짜가 날짜별로 별도의 레코드에 DB에 저장됩니다. 사용자가 이미 선택되어있는 날짜가 DB에 존재하는 경우사용자가 기존 날짜를 선택하도록 허용하지 않음

이제

(덕분에 모두 잘 작동이 이전 질문에서 도움) , 나는 버튼을 클릭 할 수 있도록 나던 오류 메시지가 어떤 종류의 원하는 .

보기 또는 컨트롤러에서 수행 할 수 있는지 확신 할 수 없습니까?

보기 :

<form action ="ListHolidays" id="listHolidays" method="post"> 
@using (Html.BeginForm()) { 
     @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>Holiday</legend> 

     <div> 
      @Html.LabelFor(model => model.PersonId, "Person") 
     </div> 

     <div>  
      @Html.DropDownListFor(model => model.PersonId, 
           new SelectList(ViewBag.Id, "Value", "Text"), 
           "---Select---" 
           ) 
     @Html.ValidationMessageFor(model => model.PersonId)    
     </div> 

     <div> 
      @Html.LabelFor(model => model.HolidayDate) 
     </div> 

     <div> 

      @Html.TextBoxFor(model => model.HolidayDate) 

      @Html.TextBoxFor(model => model.endDate) 
    <script> 

//  Date.format = 'dd/m/yyy'; 
     $("#HolidayDate").addClass('date-pick'); 
     $("#endDate").addClass('date-pick'); 
      //$('.date-pick').datePicker//({dateFormat: 'dd-mm-yy'}).val(); 

//  clickInput: true 

     $(function() { 
     //3 methods below dont allow user to select weekends 
      $('.date-pick').datePicker(
       { 
        createButton: false, 
        renderCallback: function ($td, thisDate, month, year) 
        { 
         if (thisDate.isWeekend()) 
         { 
          $td.addClass('weekend'); 
          $td.addClass('disabled'); 
         } 
        } 
       } 
     ) 

     .bind('click', 
      function() 
      { 
       $(this).dpDisplay(); 
       this.blur(); 
       return false; 
      } 
     ) 

     .bind('dateSelected', 
      function (e, selectedDate, $td) 
      { 
       console.log('You selected ' + selectedDate); 
      } 
     ); 

//  HolidayDate is start date 
      $('#HolidayDate').bind('dpClosed', 
        function (e, selectedDates) 
        { 
         var d = selectedDates[0]; 
         if (d) 
         { 
          d = new Date(d); 
          $('#endDate').dpSetStartDate(d.addDays(1).asString()); 
         } 
        } 
      ); 

      //end date is end date 
      $('#endDate').bind('dpClosed', 
        function (e, selectedDates) 
        { 
         var d = selectedDates[0]; 
         if (d) 
         { 
          d = new Date(d); 
          $('#HolidayDate').dpSetEndDate(d.addDays(-1).asString()); 
         } 
        } 
       ); 
     }); 



    </script> 

    @Html.ValidationMessageFor(model => model.HolidayDate) 
     </div> 

     <p> 
      <input type="submit" value="Create"/> 
     </p> 

컨트롤러 :

[HttpPost] 
    public ActionResult listHolidays(Holiday holiday, int? PersonId, string HolidayDate, string endDate) 
    { 

      DateTime startDates = Convert.ToDateTime(HolidayDate), 
        endDates = Convert.ToDateTime(endDate); 

      while (startDates <= endDates) 
      { 
       if (startDates.DayOfWeek != DayOfWeek.Saturday && startDates.DayOfWeek != DayOfWeek.Sunday) 
       { 
        Holiday holiday1 = new Holiday(); 
        holiday1.PersonId = PersonId.Value; 
        holiday1.HolidayDate = startDates; 

        db.Holidays.AddObject(holiday1); 
        db.SaveChanges(); 



        //say start date is 10. AddDays(1) will make it 11 then return it to startDates in 'startDates' = startdates, 
        //but doesnt chage the value of startdates = 'startdates' 
       } 

       startDates = startDates.AddDays(1); 
      } 

      return RedirectToAction("Index"); 
     } 

holidayDate = db.exisitng 경우 날짜?

확실하지 않은 방법.

알려 주시기 바랍니다. 당신이 할 필요가 무엇을 기반으로

+1

어떻게 연결할지 모르겠지만 사용자 지정 데이터 주석 유효성 검사 속성의 완벽한 경우 인 것 같습니다. –

+0

무엇? 미안하지만 여전히 약간의 매개체가있어. 어떤 충고라도? – John

+0

예제로 확인하십시오. http://odetocode.com/blogs/scott/archive/2011/02/21/custom-data-annotation-validator-part-i-server-code.aspx –

답변

1

, 당신은 당신에게 열려있는 몇 가지 옵션이 있습니다

  1. 사전로드 해당 배열하는 경우에 대해 검증을 한 후 JS 배열/수집의 몇 가지 유형으로 기존의 날짜 및 값이 변경되었습니다.
  2. datepicker의 변경된 이벤트에 ajax 쿼리를 첨부하십시오. 사용자가 날짜를 변경하면 쿼리를 수행하고 해당 날짜의 유효성을 검사합니다. 사용자 정의 데이터 주석에

     $('.date-pick').bind('dateSelected',function (e, selectedDate, $td){ 
        $.ajax({ 
         url:'somepath/action', 
         data: {selectedDateVal: selectedDate}, 
         success:function(result){ 
          if(result == true){ 
           //value exists 
          }else{ 
           //value is good 
          } 
         } 
        });}); ​ 
    
  3. 봐. 더 많은 정보를 제공해주기를 바랍니다.하지만 불행히도이 분야에 대한 많은 경험이 없습니다.

관련 문제