Alan Mosley
Top achievements
Rank 1
Alan Mosley
asked on 19 Apr 2014, 05:56 AM
I am trying to send datepicker values back to server and bind to date objects in the controller.
this is what is being posted back
sort=&group=&filter=&FromDate=1%2F20%2F2014+12%3A00%3A00+AM&ToDate=4%2F19%2F2014+12%3A00%3A00+AM
here is my post
but in my controller the dates are simple #12:00.00#
Any ideas, thanks
this is what is being posted back
sort=&group=&filter=&FromDate=1%2F20%2F2014+12%3A00%3A00+AM&ToDate=4%2F19%2F2014+12%3A00%3A00+AM
here is my post
var
chart = $(
"#SalesChart"
).data(
"kendoChart"
);
chart.dataSource.read({
"FromDate"
: $(
"#FromDate"
).data(
"kendoDatePicker"
).value(),
"ToDate"
: $(
"#ToDate"
).data(
"kendoDatePicker"
).value()
});
but in my controller the dates are simple #12:00.00#
Any ideas, thanks
5 Answers, 1 is accepted
1
Hi Alan,
Try formatting the dates as the server is expecting them, for example:
Regards,
Alexander Popov
Telerik
Try formatting the dates as the server is expecting them, for example:
"FromDate"
: kendo.toString($(
"#FromDate"
).data(
"kendoDatePicker"
).value(),
"dd/MM/yyyy"
)
Regards,
Alexander Popov
Telerik
Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.
0
Dongfen
Top achievements
Rank 1
answered on 25 Aug 2014, 05:24 PM
Hello,
In my popup edit grid, I also have a problem with datapicker does not post back its value when it is depending on another field.
My Model:
public class TestModel
{
public int person_id { get; set; }
[DisplayName("Name:")]
public string fullName { get; set; }
[DataType(DataType.Date)]
[DisplayName("DOB:")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime date_birth { get; set; }
[DataType(DataType.Date)]
[DisplayName("End Date:")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public Nullable<System.DateTime> end_date { get; set; }
[DataType(DataType.Date)]
[DisplayName("Release Date:")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public Nullable<System.DateTime> release_date { get; set; }
}
My Views:
-- GetDefendantsList.cshtml
@model IEnumerable<MvcAppDemo.Models.TestModel>
@{
ViewBag.Title = "GetDefendantsList";
}
<h2>GetDefendantsList</h2>
@(Html.Kendo().Grid(Model)
.Name("grdDefendants")
.Columns(columns =>
{
columns.Bound(o => o.fullName).Title("Name");
columns.Bound(o => o.date_birth).Title("DOB");
columns.Bound(o => o.release_date).Title("Release Date");
columns.Bound(o => o.end_date).Title("End Date");
columns.Command(cmd => { cmd.Edit(); });
})
.Editable(editable => editable
.Mode(GridEditMode.PopUp)
.TemplateName("_editDefendant")
)
.Pageable()
.Sortable()
.Selectable()
.Events(e => e.Edit("edit"))
.DataSource(dataSource => dataSource
.Ajax()
.Model(model =>
{
model.Id(m => m.person_id);
})
.Read(read => read.Action("DefendantsData_Read","Home"))
.Update(up => up.Action("DefendantsData_Update","Home"))
)
)
<script type="text/javascript">
//debugger;
function edit(e) {
var label1 = e.container.find("label");
var text1 = e.container.find("input");
}
function releasedate_changed() {
var dvalue = $("#release_date").val();
if (isDate(dvalue)) {
var fDate = new Date(Date.parse(dvalue));
var MM = fDate.getMonth() + 1; // javascript month start with 0
var DD = fDate.getDate();
var YY = fDate.getFullYear() + 3;
if (MM < 10) MM = "0" + MM;
if (DD < 10) DD = "0" + DD;
var dtEnd = MM + "/" + DD + "/" + YY;
$("#end_date").data("kendoDatePicker").value(dtEnd);
}
else if (dvalue == "") {
$("#end_date").data("kendoDatePicker").value(dvalue);
}
}
function isDate(date) {
var currVal = date;
if (currVal === '')
return false;
//Declare Regex
var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
var dtArray = currVal.match(rxDatePattern); // is format OK?
if (dtArray === null)
return false;
//Checks for mm/dd/yyyy format.
dtMonth = dtArray[1];
dtDay = dtArray[3];
dtYear = dtArray[5];
if (dtMonth < 1 || dtMonth > 12)
return false;
else if (dtDay < 1 || dtDay > 31)
return false;
else if ((dtMonth === 4 || dtMonth === 6 || dtMonth === 9 || dtMonth === 11)
&& dtDay === 31)
return false;
else if (dtMonth === 2) {
var isleap = (dtYear % 4 === 0 && (dtYear % 100 !== 0 ||
dtYear % 400 === 0));
if (dtDay > 29 || (dtDay === 29 && !isleap))
return false;
}
return true;
}
</script>
-- customer Editor Template: _editDefendant.cshtml
@model MvcAppDemo.Models.TestModel
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "Please correct the errors and try again")
@Html.HiddenFor(model => model.person_id)
<div class="k-edit-label edit_label_left">
@Html.LabelFor(model => model.fullName)
</div>
<div class="k-edit-field k-readonly">
@Html.EditorFor(model => model.fullName)
</div>
<div class="k-edit-label edit_label_left">
@Html.LabelFor(model => model.date_birth)
</div>
<div class="k-edit-field">
@(Html.Kendo().DatePicker()
.Name("date_birth")
.Min(new DateTime(1900, 1, 1))
.Max(new DateTime(2099, 12, 31))
.Value(Model.date_birth)
.Format("MM/dd/yyyy")
)
@Html.ValidationMessageFor(model => model.date_birth)
</div>
<div class="k-edit-label edit_label_left">
@Html.LabelFor(model => model.release_date)
</div>
<div class="k-edit-field">
@(Html.Kendo().DatePicker()
.Name("release_date")
.Min(new DateTime(1900, 1, 1))
.Max(new DateTime(2099, 12, 31))
.Value(Model.release_date)
.Format("MM/dd/yyyy")
.Events(
e => e.Change("releasedate_changed")
)
)
@Html.ValidationMessageFor(model => model.release_date)
</div>
<div class="k-edit-label edit_label_left">
@Html.LabelFor(model => model.end_date)
</div>
<div class="k-edit-field">
@(Html.Kendo().DatePicker()
.Name("end_date")
.Min(new DateTime(1900, 1, 1))
.Max(new DateTime(2099, 12, 31))
.Value(Model.end_date)
.Format("MM/dd/yyyy")
)
@Html.ValidationMessageFor(model => model.end_date)
</div>
<style scoped>
.k-window-titlebar {
position: absolute;
width: 100%;
height: 2.0em;
line-height: 1.1em;
border-bottom-style: solid;
border-bottom-width: 1px;
margin-top: 1em;
padding: .4em 0;
font-size: 1.2em;
white-space: nowrap;
min-height: 16px;
}
</style>
With I make change to release_date, the end_end is correctly set three years later. But when I click "Update" button, in the controller, the end_date is still the original value. It would catch the value I set in the releasedate_change event.
Please help.
Thanks
Dongfen
In my popup edit grid, I also have a problem with datapicker does not post back its value when it is depending on another field.
My Model:
public class TestModel
{
public int person_id { get; set; }
[DisplayName("Name:")]
public string fullName { get; set; }
[DataType(DataType.Date)]
[DisplayName("DOB:")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime date_birth { get; set; }
[DataType(DataType.Date)]
[DisplayName("End Date:")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public Nullable<System.DateTime> end_date { get; set; }
[DataType(DataType.Date)]
[DisplayName("Release Date:")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public Nullable<System.DateTime> release_date { get; set; }
}
My Views:
-- GetDefendantsList.cshtml
@model IEnumerable<MvcAppDemo.Models.TestModel>
@{
ViewBag.Title = "GetDefendantsList";
}
<h2>GetDefendantsList</h2>
@(Html.Kendo().Grid(Model)
.Name("grdDefendants")
.Columns(columns =>
{
columns.Bound(o => o.fullName).Title("Name");
columns.Bound(o => o.date_birth).Title("DOB");
columns.Bound(o => o.release_date).Title("Release Date");
columns.Bound(o => o.end_date).Title("End Date");
columns.Command(cmd => { cmd.Edit(); });
})
.Editable(editable => editable
.Mode(GridEditMode.PopUp)
.TemplateName("_editDefendant")
)
.Pageable()
.Sortable()
.Selectable()
.Events(e => e.Edit("edit"))
.DataSource(dataSource => dataSource
.Ajax()
.Model(model =>
{
model.Id(m => m.person_id);
})
.Read(read => read.Action("DefendantsData_Read","Home"))
.Update(up => up.Action("DefendantsData_Update","Home"))
)
)
<script type="text/javascript">
//debugger;
function edit(e) {
var label1 = e.container.find("label");
var text1 = e.container.find("input");
}
function releasedate_changed() {
var dvalue = $("#release_date").val();
if (isDate(dvalue)) {
var fDate = new Date(Date.parse(dvalue));
var MM = fDate.getMonth() + 1; // javascript month start with 0
var DD = fDate.getDate();
var YY = fDate.getFullYear() + 3;
if (MM < 10) MM = "0" + MM;
if (DD < 10) DD = "0" + DD;
var dtEnd = MM + "/" + DD + "/" + YY;
$("#end_date").data("kendoDatePicker").value(dtEnd);
}
else if (dvalue == "") {
$("#end_date").data("kendoDatePicker").value(dvalue);
}
}
function isDate(date) {
var currVal = date;
if (currVal === '')
return false;
//Declare Regex
var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
var dtArray = currVal.match(rxDatePattern); // is format OK?
if (dtArray === null)
return false;
//Checks for mm/dd/yyyy format.
dtMonth = dtArray[1];
dtDay = dtArray[3];
dtYear = dtArray[5];
if (dtMonth < 1 || dtMonth > 12)
return false;
else if (dtDay < 1 || dtDay > 31)
return false;
else if ((dtMonth === 4 || dtMonth === 6 || dtMonth === 9 || dtMonth === 11)
&& dtDay === 31)
return false;
else if (dtMonth === 2) {
var isleap = (dtYear % 4 === 0 && (dtYear % 100 !== 0 ||
dtYear % 400 === 0));
if (dtDay > 29 || (dtDay === 29 && !isleap))
return false;
}
return true;
}
</script>
-- customer Editor Template: _editDefendant.cshtml
@model MvcAppDemo.Models.TestModel
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "Please correct the errors and try again")
@Html.HiddenFor(model => model.person_id)
<div class="k-edit-label edit_label_left">
@Html.LabelFor(model => model.fullName)
</div>
<div class="k-edit-field k-readonly">
@Html.EditorFor(model => model.fullName)
</div>
<div class="k-edit-label edit_label_left">
@Html.LabelFor(model => model.date_birth)
</div>
<div class="k-edit-field">
@(Html.Kendo().DatePicker()
.Name("date_birth")
.Min(new DateTime(1900, 1, 1))
.Max(new DateTime(2099, 12, 31))
.Value(Model.date_birth)
.Format("MM/dd/yyyy")
)
@Html.ValidationMessageFor(model => model.date_birth)
</div>
<div class="k-edit-label edit_label_left">
@Html.LabelFor(model => model.release_date)
</div>
<div class="k-edit-field">
@(Html.Kendo().DatePicker()
.Name("release_date")
.Min(new DateTime(1900, 1, 1))
.Max(new DateTime(2099, 12, 31))
.Value(Model.release_date)
.Format("MM/dd/yyyy")
.Events(
e => e.Change("releasedate_changed")
)
)
@Html.ValidationMessageFor(model => model.release_date)
</div>
<div class="k-edit-label edit_label_left">
@Html.LabelFor(model => model.end_date)
</div>
<div class="k-edit-field">
@(Html.Kendo().DatePicker()
.Name("end_date")
.Min(new DateTime(1900, 1, 1))
.Max(new DateTime(2099, 12, 31))
.Value(Model.end_date)
.Format("MM/dd/yyyy")
)
@Html.ValidationMessageFor(model => model.end_date)
</div>
<style scoped>
.k-window-titlebar {
position: absolute;
width: 100%;
height: 2.0em;
line-height: 1.1em;
border-bottom-style: solid;
border-bottom-width: 1px;
margin-top: 1em;
padding: .4em 0;
font-size: 1.2em;
white-space: nowrap;
min-height: 16px;
}
</style>
With I make change to release_date, the end_end is correctly set three years later. But when I click "Update" button, in the controller, the end_date is still the original value. It would catch the value I set in the releasedate_change event.
Please help.
Thanks
Dongfen
0
Hi Dongfen,
This happens because programmatically modifying the widget's value does not trigger a change in the underlying item. In the current scenario I would recommend using the Grid's edit event to attach the change event handlers and directly access the data item. For example:
Regards,
Alexander Popov
Telerik
This happens because programmatically modifying the widget's value does not trigger a change in the underlying item. In the current scenario I would recommend using the Grid's edit event to attach the change event handlers and directly access the data item. For example:
function
edit(e) {
var
release = e.container.find(
"[name=release_date]"
).data(
"kendoDatePicker"
);
var
end = e.container.find(
"[name=end_date]"
).data(
"kendoDatePicker"
);
release.bind(
"change"
,
function
() {
var
dvalue = release.value();
if
(isDate(dvalue)) {
var
fDate =
new
Date(Date.parse(dvalue));
var
MM = fDate.getMonth() + 1;
// javascript month start with 0
var
DD = fDate.getDate();
var
YY = fDate.getFullYear() + 3;
if
(MM < 10) MM =
"0"
+ MM;
if
(DD < 10) DD =
"0"
+ DD;
var
dtEnd = MM +
"/"
+ DD +
"/"
+ YY;
e.model.set(
"end_date"
, dtEnd);
}
else
if
(dvalue ==
""
) {
e.model.set(
"end_date"
, dvalue);
}
});
}
Regards,
Alexander Popov
Telerik
Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.
0
Dongfen
Top achievements
Rank 1
answered on 27 Aug 2014, 04:28 PM
Thanks, Alexander.
I tried your suggestion to put change event in Grid's edit event, and remove the datepicker's date change event.
But I get error on the isDate function when I make change to the release_date.
the line cause the problem is: var dtArray = currVal.match(rxDatePattern); // is format OK?
The error message is: 0x800a01b6 - JavaScript runtime error: Object doesn't support property or method 'match'
It seems when the change event is moved inside grid's edit event, all jQuery's function does not work any more.
I tried to not use the regex, and use getMonth, getDate, and getFullYear methods, but then I will get error that said getMonth is not defined.
Any idea why this happens?
Dongfen
I tried your suggestion to put change event in Grid's edit event, and remove the datepicker's date change event.
But I get error on the isDate function when I make change to the release_date.
the line cause the problem is: var dtArray = currVal.match(rxDatePattern); // is format OK?
The error message is: 0x800a01b6 - JavaScript runtime error: Object doesn't support property or method 'match'
It seems when the change event is moved inside grid's edit event, all jQuery's function does not work any more.
I tried to not use the regex, and use getMonth, getDate, and getFullYear methods, but then I will get error that said getMonth is not defined.
Any idea why this happens?
Dongfen
0
Dongfen
Top achievements
Rank 1
answered on 27 Aug 2014, 04:40 PM
Actually, I take back about getMonth, getDate, getFullYear not working.
It is just the Regex not working.
It is just the Regex not working.