我想从两个JQuery日历中获取日期范围内的项目范围,然后在按下提交按钮时更新视图,以便我只看到所选日期之间的项目。我不确定我是否会以最好的方式开展工作。在MVC中,如何使用Javascript日历中的日期范围返回项目和实体数据库
我的计划是:
获取用户选择在日历的日期。
使用Javascript将日期作为变量返回。
将变量发送到控制器,然后返回一个新的视图。
我的代码是下面和我的问题真的是两个部分。
有没有更好的方法来做到这一点?
如果这是好的,我怎样才能获得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。当我点击它时,它只是将磅符号添加到家庭/索引网址,并在浏览器开发者工具中显示非法字符。
<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'作为路由值(不是编辑的值)。您需要javascript才能生成新的网址,例如你可以处理链接的点击事件并使用'location.href ='@ Url.Action(“IndexDateRange”)+'?startDateFromJS ='+ $('#startDate')。datepicker('getDate')+'&endDateFromJS '+ .....'和链接可以只是'Get Dates' –
@StephenMuecke非常感谢。这真的很有帮助。我在查询字符串的工作方面遇到了一些麻烦(某处有非法字符),但我确信我犯了一个错误。我会在清晨用清新的眼睛再次尝试。再次感谢! – Stormseye
我按照@StephenMuecke的建议连线了这一点,但我仍然有一些问题需要解决。我想我可能没有正确格式化查询字符串。目前在点击处理程序中,我有: location.href ='@ Url.Action(“IndexDateRange”)+'?startDateFrom JS ='+ $('#startDate').datepicker('getDate') + 'endDateFromJS&' + $( '#结束日期')日期选择器( 'GETDATE')'。 但我收到了一个非法字符错误。我需要逃避什么吗? – Stormseye