1

私はこのような質問がたくさんあることを知っていますが、私は本当に答えの説明を得ることができません...ここに私の見解があります...

<script type="text/javascript" language="javascript">
$(function () {
    $(".datepicker").datepicker({ onSelect: function (dateText, inst) { },
        altField: ".alternate"
    });

});
</script>

@model IEnumerable<CormanReservation.Models.Reservation>
@{
ViewBag.Title = "Index";
}

<h5>
    Select a date and see reservations...</h5>
<div>
    <div class="datepicker">
    </div>
    &nbsp;<input name="dateInput" type="text" class="alternate" />
</div>

入力テキストの値を取得したい...日付ピッカーがその値を渡すため、入力テキストにすでに値があります...私ができないことはそれをコントローラーに渡すことです...これが私のコントローラーです:

  private CormantReservationEntities db = new CormantReservationEntities();
    public ActionResult Index(string dateInput )
    {
        DateTime date = Convert.ToDateTime(dateInput);
        var reservations = db.Reservations.Where(r=>r.Date==date).Include(r => r.Employee).Include(r => r.Room).OrderByDescending(r => r.Date);
        return View(reservations.ToList());
    }

ユーザーが私のホームページのカレンダーで選択した日付の間に行われた予約を私のホームページにリストしようとしています...

4

1 に答える 1

0

ビューにフォームタグが表示されません...またはビュー全体が表示されていませんか?わかりにくいですが、コントローラーに投稿するには、ajax呼び出しを介してコントローラーに値を送信するか、モデルを投稿する必要があります。あなたの場合、モデルはでIEnumerable<CormanReservation.Models.Reservation>あり、入力は日付セレクターであり、ViewModelにバインドされているようには見えません。どの時点で日付をサーバーにポストバックしますか?送信ボタンのあるフォームがありますか、それとも表示されていないajax呼び出しがありますか?

これは、日付を渡すために呼び出すことができるAjaxリクエストの例です。

$(function () {
    $(".datepicker").onselect(function{
          searchByDate();
        })
    });

});

function searchbyDate() {
   var myDate = document.getElementById("myDatePicker");

    $.ajax({
        url: "/Home/Search/",
        dataType: "json",
        cache: false,
        type: 'POST', 
        data: { dateInput: myDate.value },
        success: function (result) {
            if(result.Success) {
               // do something with result.Data which is your list of returned records
            }
        }
    });
}

日付ピッカーコントロールには、それを参照するための何かが必要です

<input id="myDatePicker" name="dateInput" type="text" class="alternate" />

あなたの行動は次のようになります

private CormantReservationEntities db = new CormantReservationEntities();

public JsonResult Search(string dateInput) {
    DateTime date = Convert.ToDateTime(dateInput);
    var reservations = db.Reservations.Where(r=>r.Date==date).Include(r => r.Employee).Include(r => r.Room).OrderByDescending(r => r.Date);
    return View(reservations.ToList());
    return Json(new {Success = true, Data = reservations.ToList()}, JsonRequestBehaviour.AllowGet());
}

アップデート

これをデータを投稿してビューを返す標準の投稿にしたい場合は、これと同様の変更を加える必要があります。

ViewModelを作成する

public class ReservationSearchViewModel {
    public List<Reservation> Reservations { get; set; }
    public DateTime SelectedDate { get; set; }
}

コントローラのアクションを変更して、最初にページをロードしてから、データを投稿して、データを含むビューを返すことができるようにします

public ActionResult Index() {
    var model = new ReservationSearchViewModel();
    model.reservations = new List<Reservation>();
    return View(model);
}

[HttpPost]
public ActionResult Index(ReservationSearchViewModel model) {
    if(ModelState.IsValid)    
    var reservations = db.Reservations.Where(r => r.Date = model.SelectedDate).Include(r => r.Employee).Include(r => r.Room).OrderByDescending(r => r.Date);
    }
    return View(model)
}

インデックスHttpPostアクションに投稿するフォームがあるようにビューを変更します

@model CormanReservation.Models.ReservationSearchViewModel

<h5>Select a date and see reservations...</h5>
@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    @Html.EditorFor(model => model.SelectedDate)
    @Html.EditorFor(model => model.Reservations) // this may need to change to a table or grid to accomodate your data
    <input type="submit" value="Search" />
}
于 2012-05-11T03:29:25.250 に答える