2つのJQueryカレンダーから日付の間にあるアイテムの範囲を取得し、送信ボタンを押したときにビューを更新したい私は選択された日付の間にのみ項目を表示します。私は物事について最善の方法を取っているかどうかはわかりません。MVCでは、Javascriptカレンダーの日付の範囲を使用してEntityデータベース内のアイテムを返す方法
私の計画にした
は、カレンダーの日付を選択するようにユーザーを取得します。
JavaScriptを使用して日付を変数として返します。
変数をコントローラに送信し、コントローラに新しいビューを返します。
私のコードは私の質問は2つの部分に実際にある以下であると。
これを行うより良い方法はありますか?
これが正常であれば、コントローラに戻すためにjavascript変数をActionLinkに取得するにはどうすればよいですか?
ありがとうございます!
コントローラ:インデックスで
// GET: Home
public ActionResult IndexDateRange(string sortOrder, DateTime startDateFromJS, DateTime endDateFromJS)
{
var sortedByDates = from pay in db.DailyPayments
select pay;
sortedByDates = sortedByDates.OrderByDescending(pay => pay.Date);
var first = sortedByDates.Select(pay => pay.Date).First();
var lastDate = sortedByDates.Select(pay => pay.Date).Last();
if (startDateFromJS > first.Date || (endDateFromJS < lastDate))
{
var dateRange = sortedByDates.Where(pay => pay.Date >= startDateFromJS && pay.Date <= endDateFromJS);
return View(dateRange.ToList());
}
return View(sortedByDates.ToList());
}
Javascriptを:
@Html.ActionLink("Get Dates", "IndexDateRange", routeValues: new { startDateFromJS = startDate, endDateFromJS = endDate })
<script>
$(function() {
var startDate = getStartDate();
var endDate = getEndDate();
function getStartDate() {
$('#startDate').datepicker();
$('#calendarSubmitButton').click(function() {
//var startDate = $('#startDate').datepicker('getDate');
var startDate = $('#startDate').datepicker('getDate');
console.log(startDate);
return startDate;
})
};
function getEndDate() {
$('#endDate').datepicker();
$('#calendarSubmitButton').click(function() {
var endDate = $('#endDate').datepicker('getDate');
console.log(endDate);
return endDate;
})
};
一時的なテストJS試してみて、ワイヤーまでのhrefをします。私がクリックすると、ポンド記号がホーム/インデックスURLに追加され、ブラウザの開発者ツールに違法文字が追加されます。
<a href="#" id="calendarSubmitButton">Get Dates</a>
<script type="text/javascript">
$('#calendarSubmitButton').click(function() {
var tempStartDate = @DateTime.Now.AddMonths(-1).ToString("yyyyMMdd");
var tempEndDate = @DateTime.Now.ToString("yyyyMMdd");
location.href='@Url.Action("IndexDateRange")+'?startDateFromJS='+$('tempStartDate')+'&endDateFromJS='+$('tempEndDate')';
});
</script>
画面のグラブ:
'@ Html.ActionLink()'文句を言わない仕事のご使用中のあなたはの初期値を追加するので、ルート値(編集された値ではない)として 'startDate'と' endDate'を返します。新しいURLを生成するにはjavascriptが必要です(例: datePicker( 'getDate')+ '&endDateFromJS(' indexDateRange ')+' startDateFromJS = '+ $('#startDate ')を使用して、 '+ ..... 'とすることができ、リンクは' Get Dates ' –
@StephenMueckeです。それは本当に役に立ちます。私はクエリ文字列を(どこかで違法な文字を)動作させるのに少し問題がありますが、私はちょうど間違いを犯したと確信しています。私は朝に新鮮な目で再試行します。再度、感謝します! – Stormseye
これは@StephenMueckeの提案通りに配線されていますが、私はまだ問題が発生しています。私は、クエリ文字列を正しくフォーマットしていないかもしれないと思います。現在クリックハンドラー上にあります: location.href = '@ Url.Action( "IndexDateRange")+' startDateFrom JS = '+ $('#startDate ').datepicker(' getDate ') + '&endDateFromJS' + $( '#endDate')。datepicker( 'getDate') '; しかし、私は不正な文字エラーが発生しています。私は何かを脱出する必要がありますか? – Stormseye