Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Telerik MVC数据采集器上onChange的非常奇怪的事件行为_Asp.net Mvc_Asp.net Mvc 3_Razor_Telerik_Telerik Mvc - Fatal编程技术网

Asp.net mvc Telerik MVC数据采集器上onChange的非常奇怪的事件行为

Asp.net mvc Telerik MVC数据采集器上onChange的非常奇怪的事件行为,asp.net-mvc,asp.net-mvc-3,razor,telerik,telerik-mvc,Asp.net Mvc,Asp.net Mvc 3,Razor,Telerik,Telerik Mvc,对于开始的问题,我的代码(我将尝试只包括要开始的相关部分),从我的脚本开始: function RaceDate_onChange() { var pickedDate = $(this).data('tDatePicker').value(); var month = pickedDate.getMonth() + 1; $.get("/RaceCard/Details?year=" + pickedDate.getFullYear() + "&month="

对于开始的问题,我的代码(我将尝试只包括要开始的相关部分),从我的脚本开始:

function RaceDate_onChange() {
    var pickedDate = $(this).data('tDatePicker').value();
    var month = pickedDate.getMonth() + 1;
    $.get("/RaceCard/Details?year=" + pickedDate.getFullYear() + "&month=" + month + "&day=" + pickedDate.getDate());
}
然后我的标记:

@Html.Telerik().DatePickerFor(model => model.RaceDate).ClientEvents(events => events.OnChange("RaceDate_onChange"))
最后是一点接收动作:

[HttpGet]
public ActionResult Details(int year, int month, int day)
{
    var viewModel = new RaceCardModel {Metadata = DetailModelMetadata.Display, RaceDate = new DateTime(year, month, day)};
我正在尝试选择一个新的日期来触发get,以便在不提交表单的情况下刷新页面。这可以正常工作,但存在以下问题:

在对
Details
操作的GET请求中,
day
值始终比日期选择器晚一天。例如,第一个值是在渲染视图时从视图模型属性设置的,例如3。然后我点击14并点击action方法中的断点。
day
值为3。当我点击29并点击断点时,
day
的值是14


除了问什么是错的,我会冒昧地问,是否有更好的方法,而不是更复杂的。我是一名新手,宁愿交付需要修改的工作代码,也不愿陷入细节和细节中。

至于1个月的差异,这是正常的,这就是该方法在javascript中在
日期
实例上的工作方式:

getMonth返回的值是 介于0和11之间的整数。0 对应于1月1日至2月, 等等

因此,添加+1是应对这种情况的正确方法,正如您所做的那样

关于AJAX调用的一点意见:永远不要硬编码URL。处理url时始终使用url帮助程序:

var year = pickedDate.getFullYear();
var month = pickedDate.getMonth() + 1;
var day = pickedDate.getDate();
var url = '@Url.Action("Details", "RaceCard")';
$.get(url, { year: year, month: month, day: day }, function(result) {
    // process the results of the AJAX call
});

尝试使用e.value,如示例所示。您可能正在使用旧版本,其中value()方法在OnChange事件期间返回了以前的值

更新:

“e.value”指OnChange参数的值字段:

function onChange(e) {
   var date = e.value; // instead of datePicker.value()
}

x=1/0是我在试图让Chrome中的JS调试器停止时留下的一个oopsie。但是,你确实误解了我今天的想法。我得到的价值不仅仅比我预期的少1。当偶数触发时,它会向我传递在选择新的日期值之前选择器上的日期值。我试图在示例中说明这一点,现在更清楚了,我已经排除了我的示例演示一个简单问题的可能性。@ProfK,您可能没有在正确的时间调用此
RaceDate\u onChange
方法。看起来它是在实际值更改之前调用的。由于您没有说明如何以及在何处注册此
RaceDate\u onChange
方法,我不知道如何进一步帮助您。我的代码是从Telerik文档中复制粘贴的,用于“订阅onChange事件”,除了控件的名称更改。我正在尝试创建压缩示例代码。抱歉,我将错误的剪贴板粘贴到了标记示例中。它现在已修复。如果在发送前通知当前日期,会发生什么情况?尝试以下操作:警报(pickedDate);警报(pickeDate.getDate())@阿塔纳斯,我从7月11日开始,然后点击7月13日。两个警报都给我11。也许要用Telerik记录一些东西?我没有看到使用lambda语法的Razor示例,而且我无法让它工作。您能在这里提供帮助吗?为什么您需要razor语法的示例-代码完全相同。只需使用事件参数的值字段。函数(e){var value=e.value;}我只是在尝试了几次使lamba语法正常工作,并且只设法使事件的简单函数名参数正常工作之后才请求帮助。那么,您是否尝试了我的建议?要从OnChange事件的事件参数中获取值?