在ASP.NET MVC项目中使用Telerik的Kendoui DatePicker,该项目也使用实体框架。我正在为现有项目添加一个增强功能,以突出显示日期的记录在Oracle数据库中。
时。在视图中:
@{
var dateList = HelperMethodClass.GetRecordDates(model);
var dateString = dateList.Aggregate("", (current, date) => current + (date.Equals(dateList.Last()) ? date.ToString("yyyy-MM-dd") : date.ToString("yyyy-MM-dd") + ","));
}
GetRecordDates()
是HelperMethodClass
中的一种方法,该方法对所有日期询问数据库,并使用model
传递的记录。我将其格式化,以便以后可以控制解析(见下文)。稍后在同一视图中的表中,DatePicker
放置在表中,我存储dates
变量以拉动其他.cshtml
页面(该页面下方是在项目的视图 ->共享 -> EditorteMplates文件夹中):
<div class="leftActions">
<input type="hidden" id="myDates" value="@dateString" />
<table>
<tr>
<td>@Html.EditorFor(m => m.Date, new {@sourcePage = "MyView"})</td>
<tr>
</table>
</div>
这是另一个.cshtml页面:
@model DateTime?
@{
var calendar = Html.Kendo().DatePickerFor(m => m).Format("yyyy-MM-dd");
if (ViewData["sourcePage"] == "MyView")
{
calendar.Footer("<p>" + DateTime.Today.ToLongDateString() + "</p><span id="legend">Record Exists<span>");
calendar.MonthTemplate("# if ($.inArray(+data.date, recordDates) != -1) { #" + "<div class="reportDate">" +
"</div>" + "# } #" + "#= data.value #");
}
}
<span style="width: 6em">
@calendar
</span>
<script>
var dates = $('#myDates');
var dateArray = dates.toString().split(',');
var recordDates = d(dateArray);
function d(x) {
var myArray = [];
for (var i = 0; i < x.length; i++) {
myArray.push(new Date(x[i].substring(0, 4), x[i].substring(5, 7), x[i].substring(8)));
}
return myArray;
};
</script>
<style>
#legend, .reportDate {
background-color:rgba(0,0,0,.2);
}
.reportDate {
position: absolute;
width: 32px;
height: 28px;
}
</style>
我相信我的问题是到达EditorteMplate文件时(实际创建了DatePicker
的位置)。我对COD-BEHIND GetRecordDates()
方法提出了突破点,以查看发生了什么。视图变量正常工作,并且EditorteMplate中的dates
变量正在按预期从视图中拉出日期字符串,但这就是停止的位置。我尝试将
放在视图中,并在EditorteMplate中使用.innerhtml以将
的文本设置为等于dateArray
或recordDates
变量,但是,在浏览器上启用了调试时,它显示出一个错误,显示出一个错误这两个变量是null
。日历与页脚相处得很好,但是日期并未按预期突出显示。如果我将日期数组对JavaScript
进行核对,则突出显示日期。我还尝试将查询创建的list
直接传递到我的dates
变量中,但结果是相同的。
我是Web App开发的新手,因此我想如果我了解在访问页面时如何解释和运行代码,则可以解决该问题。关于我如何从代码范围内创建的array
的日期突出显示的任何想法?
我能够在我的一个观点中使您的代码工作(解释),但我必须对D()函数进行几个更改。
我更改了
var dates = $('#myDates');
to
var dates = $('#myDates').val();
和
myArray.push(new Date(x[i].substring(0, 4), x[i].substring(5, 7), x[i].substring(8)));
to
myArray.push(new Date(x[i].substring(0, 4), x[i].substring(5, 7) - 1, x[i].substring(8)).getTime());
,然后使用硬编码日期字符串为我工作:
@{
var dateString = "2016-06-28,2016-06-29";
}
问题是没有.val(),记录日期不包含任何有效日期,并且没有.getTime()
$.inArray(+data.date, recordDates)
将数字日期与日期对象进行比较。
一旦我把它们都作为数字化,我的6月28日和29日都有灰色的盒子。