I've found the documentation on how to get the selected value from a drop down list on the DataBound event to be non-existant.
I eventually found the solution here: https://www.telerik.com/forums/dropdownlist-mvc---set-default-value-at-runtime
It is easy to get the selectedIndex in this event handler. Getting the value that this corresponds to so I can run some custom logic (show/hide fields, for example) when the document is being loaded (as opposed to a select event) was the tricky part.
I already had a generic function I called to obtain this value across the board. I was able to finally solve the issue of getting the selected value when not in the Select event (where the dataItem object is available) using the following code:
var
GetValueFromKendoSelect =
function
(context, e) {
// if this is from a select event then we'll get the dataitem
var
dataItem = GetDataItemFromKendoSelect(context, e);
if
(dataItem != undefined) {
return
dataItem.Value;
}
else
{
// if this is from a databound event we get it from the sender
var
sender = e.sender;
if
(sender == undefined) {
console.log(
"Couldn't retrieve value from Kendo Select list"
);
console.log(e);
return
undefined;
}
else
{
var
defaultItem = sender.dataSource.at(sender.selectedIndex);
return
""
+ defaultItem.Value;
}
}
}
I can then use this like this (you can see how it will then generate a usable result in the select and databound events):
var
onPassportedBenefitInPaymentSelect =
function
(e) {
var
torPassport = GetValueFromKendoSelect(
this
, e);
debugger;
if
(torPassport == undefined) {
console.log(
"torPassport detected as undefined in torPassportBenefitSelectHandler"
);
return
false
;
}
return
ProcessTORPassport(torPassport);
}
var
onPassportedBenefitInPaymentDataBound =
function
(e) {
var
torPassport = GetValueFromKendoSelect(
this
, e);
if
(torPassport == undefined) {
console.log(
"torPassport detected as undefined in torPassportBenefitOnDataBoundHandler"
);
return
false
;
}
return
ProcessTORPassport(torPassport);
}
var
ProcessTORPassport =
function
(torPassport) {
var
$passportedAnsweredGroup = $(
".passported-answered-group"
);
var
$passportedNoGroup = $(
".passported-no-group"
);
var
$passportedYesGroup = $(
".passported-yes-group"
);
if
(torPassport ==
""
|| torPassport ==
null
) {
$passportedAnsweredGroup.hide();
}
else
{
$passportedAnsweredGroup.show();
}
switch
(torPassport) {
case
"True"
:
$passportedYesGroup.show();
$passportedNoGroup.hide();
break
;
case
"False"
:
$passportedNoGroup.show();
$passportedYesGroup.hide();
break
;
default
:
$passportedNoGroup.hide();
$passportedYesGroup.hide();
break
;
}
}
:
Perhaps the documentation could be clearer how this can be achieved, considering how simple it actually is in the end, yet how difficult it is to find the solution.
Hi,
I discovered a problem with ClearPromptChar configuration. When I set ClearPromptChar to true, I expect that the mask signs should not be in the output. I.e. when I define mask 000-000 and insert 123-456 into the MaskedTextBoxFor the output should be 123456. I would like to avoid removing "-" manually.
Example available at: http://dojo.telerik.com/aTEROJIG/3
Should it work as I expected or I misunderstood?
Thanks,
Tomas.
@(Html.Kendo().Grid<
CMS_2013.Models.SeasonalProfile
>()
.Name("Grid")
.Events(e=>e.Edit("onEdit"))
.Columns(columns=>
{
columns.Bound(o => o.ID);
columns.Bound(o => o.Profile_Code);
columns.Bound(o => o.ProfileType);
columns.Bound(o => o.Description);
columns.Bound(o => o.Site);
columns.Bound(o => o.PATCLASS);
columns.Bound(o => o.Specialty);
columns.Command(command => { command.Edit(); command.Destroy(); });
})
.ToolBar(commands=>commands.Create())
.Editable(editable=>editable
.Mode(GridEditMode.PopUp))
.DataSource(dataSource=>dataSource
.Ajax()
.Model(m=>m.Id(p=>p.ID))
.Events(events => events.Error("error"))
.PageSize(10)
.Read(read=>read.Action("ReadProfiles","Profiles"))
.Create(create=>create.Action("InsertProfile","Profiles"))
.Update(update=>update.Action("UpdateProfile","Profiles"))
.Destroy(delete=>delete.Action("DeleteProfile","Profiles"))
)
.Pageable()
.Sortable()
.Filterable()
)
function
error(e) {
if
(e.errors) {
var
message =
"Errors:\n"
;
$.each(e.errors,
function
(key, value) {
if
(
'errors'
in
value) {
$.each(value.errors,
function
() {
message +=
this
+
"\n"
;
});
}
});
alert(message);
}
}
This works fine, displaying the error message if the validation fails. However, I have two problems:-
How can I solve these two issues?
Thanks
Hi, in a grid popup edit template I got a field bound like:
@Html.HiddenFor(model => model.LogoUrl)
This field represents an image URL stored in Azure Blob.
I already got a Kendo Upload in the edit template that upload the image to Azure, but in the KendoUpload success return function, I need to set the URL received by azure in the object currently edited. For now I try this:
function
logoUp_onComplete(e) {
var
imgURL = e.response.url;
var
img = $(
"#LogoImage"
)[0];
var
data = $(
"#LogoUrl"
)[0];
if
(img !=
null
) {
$(img).attr(
"src"
, imgURL);
$(data).val(imgURL);
}
}
But the databinding are not hit and the underlying model is not changed. How I can achieve that?
Hi,
I have issue with chart after upgrade kendo libraries to R3 2018 (ver. 2018.3.911.545). Here is my code snippet:
@(Html.Kendo().Chart(Model.ListChartOfProjectHistory)
.Name("MyProjectHistoryChart")
.Series(series =>
{
series.Line(s => s.QuoteValue).Color("#8ACD16").Name("My Projects")
.Tooltip(true);
series.Line(s => s.OfficeQuoteValue).Color("#2698DB").Name("My Office Projects")
.Tooltip(true);
})
.Legend(legend => legend
.Position(ChartLegendPosition.Bottom)
)
.ValueAxis(axis => axis.Numeric().Labels(labels => labels.Format("{0:N0}")))
.CategoryAxis(axis => axis
.Categories(c => c.MonthValue)
)
.Tooltip(tooltip => tooltip.Visible(true).Format("C2"))
.HtmlAttributes(new { style = "border-style:none;height:300px" })
.Events(events => events.LegendItemClick("refreshHistory"))
)
and this is my layout with references:
<!DOCTYPE html>
<
html
>
<
head
>
<
title
>@ViewBag.Title</
title
>
<
meta
name
=
"SKYPE_TOOLBAR"
content
=
"SKYPE_TOOLBAR_PARSER_COMPATIBLE"
/>
<
link
rel
=
"shortcut icon"
href
=
"@Url.Content("
~/Content/images/favicon.gif")"
type
=
"image/x-icon"
/>
<
link
href
=
"@Url.Content("
~/Content/Site.css?
v
=
123
")"
rel
=
"stylesheet"
type
=
"text/css"
/>
<
link
href
=
"@Url.Content("
~/Content/css/global.css?
v
=
123
")"
rel
=
"stylesheet"
type
=
"text/css"
/>
<
link
href
=
"@Url.Content("
~/Content/kendo.dataviz.min.css?
ver
=
1
.1")"
rel
=
"stylesheet"
type
=
"text/css"
/>
<
link
href
=
"@Url.Content("
~/Content/kendo.common.min.css?
ver
=
1
.1")"
rel
=
"stylesheet"
/>
<
link
href
=
"@Url.Content("
~/Content/kendo.default.min.css?
ver
=
1
.1")"
rel
=
"stylesheet"
/>
<
script
src
=
"@Url.Content("
~/Scripts/jquery.min.js")"
type
=
"text/javascript"
></
script
>
<
script
src
=
"@Url.Content("
~/Scripts/kendo.dataviz.min.js?
ver
=
1
.1")"></
script
>
<
script
src
=
"@Url.Content("
~/Scripts/kendo.web.min.js?
ver
=
1
.1")"
type
=
"text/javascript"
></
script
>
<
script
src
=
"@Url.Content("
~/Scripts/kendo.aspnetmvc.min.js?
ver
=
1
.1")"
type
=
"text/javascript"
></
script
>
<
script
src
=
"@Url.Content("
~/Scripts/corners.js")"
type
=
"text/javascript"
></
script
>
<
script
src
=
"@Url.Content("
~/Scripts/menu.js")"
type
=
"text/javascript"
></
script
>
<
script
src
=
"@Url.Content("
~/Scripts/jquery.validate.min.js")"
type
=
"text/javascript"
></
script
>
<
script
src
=
"@Url.Content("
~/Scripts/jquery.validate.unobtrusive.min.js")"
type
=
"text/javascript"
></
script
>
I also already updated it with telerik.ui.for.aspnetmvc.hotfix.2018.3.911.commercial libraries but still getting the same error. Fyi my project use MVC 5 and bootstrap 4.
Any thoughts on how to fix this greatly appreciated.
Thanks.
We have a Web API where the controller classes implements ApiController.
The CRUD-operations looks like:
public IHttpActionResult Get()
public IHttpActionResult Get(int id)
public int Post(Company company)
public void Put(Company company)
public void Delete(int id)
Adding a Kendo UI ASP.NET MVC Grid that view data works, but we got stuck binding to datasource when we tried to implement inline-editable rows.
The API methods on the demo page, https://demos.telerik.com/aspnet-mvc/grid, takes a DataSourceRequest as a parameter.
Here it gets confusing especially when the documentation is not so comprehensive.
Can't we just use our API as it is, do we need to create yet another class where all the CRUD-operations takes the DataSourceRequest parameter?
if I add:
.Group(g => {
g.Add(c => c.DistrictName);
g.Add(c => c.SchoolName);
})
to my datasource:
.DataSource(ds => ds
.Ajax()
.ServerOperation(false)
.Read(read => read.Action("RetrieveReqStatusReport", "ReportSupport", new { orgId = ViewBag.OrgSelection.Id, personId = ViewBag.PersonId, yearId = ViewBag.YearSelection.Id }))
.PageSize(50)
.Group(g => {
g.Add(c => c.DistrictName);
g.Add(c => c.SchoolName);
})
)
then
function filterMenuInit(e) {
if (e.field == "DueDate") return;
var filterMultiCheck = this.thead.find("[data-field=" + e.field + "]").data("kendoFilterMultiCheck")
filterMultiCheck.container.empty();
filterMultiCheck.checkSource.sort({ field: e.field, dir: "asc" });
filterMultiCheck.checkSource.data(filterMultiCheck.checkSource.view().toJSON());
filterMultiCheck.createCheckBoxes();
}
generates the following error when I try to filter:
Uncaught ReferenceError: DistrictName is not defined
at eval (eval at compile (kendo.all.min.js:25), <anonymous>:3:209)
at Object.render (kendo.all.min.js:25)
at Object.d [as render] (jquery.min.js:2)
at init.createCheckBoxes (kendo.all.min.js:45)
at init.filterMenuInit (1:371)
at init.trigger (kendo.all.min.js:25)
at init.c (kendo.all.min.js:53)
at init.trigger (kendo.all.min.js:25)
at init._init (kendo.all.min.js:45)
at init._click (kendo.all.min.js:45)
if I remove it, multi-filter works fine.
TIA for the insight into what I'm failing to understand.
Hi,
I need to filter a combobox based on the value of a check box.
I explain.
I have a checkbox that will start unchecked (value 0).
And below is a combobox that will use an api to fetch the data.
If the user selects this checkbox, the data from the combobox must be updated.
Very similar to this example: https://demos.telerik.com/aspnet-core/combobox/cascadingcombobox
But using the checkbox.
Can someone help me?
I am using ASP.NET MVC Core.