0

ユーザーが 2 つのカレンダーから休日 (開始日と終了日) を選択すると、開始日から終了日までの日付が、日付ごとに別々のレコードとして 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 date?

これについてどうすればよいかわかりません。

お知らせ下さい。

4

1 に答える 1

1

何をする必要があるかに基づいて、いくつかのオプションが用意されています。

  1. 既存の日付を何らかのタイプの JS 配列/コレクションに事前にロードし、値が変更されたときにその配列に対して検証を行います。
  2. 日付ピッカーの変更されたイベントに 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. カスタム データ注釈を調べます。これについてもっと情報を提供できればと思いますが、残念ながら、この分野ではあまり経験がありません。

于 2012-12-11T16:18:39.657 に答える