or
<div id="listView"></div><script type="text/x-kendo-tmpl" id="dataSource-template"><div class="product-view"><fieldset><legend>Owner</legend><input id="ddlOwner" value="#= Owner #" /></fieldset><a id="Save" class="k-button k-button-icontext k-update-button" href="\\#"><span class="k-icon k-update"></span>Save</a></div></script>$(document).ready(function() { var dataSource = new kendo.data.DataSource ({<-- snip -->change: function() {template = kendo.template($("#dataSource-template").html());$("#listview").html(kendo.render(template, this.view())); $("#ddlOwner").kendoDropDownList({ dataTextField: "Text", dataValueField: "Value", dataSource:
[{ Text:"A", Value:"d8368ccc-7974-4353-8462-e414d48164b3" },{ Text:"B",
Value:"4eb5cb10-75ad-46ff-9186-4fb5d1a18c63" },{ Text:"C",
Value:"14467467-587c-4cc1-bc0c-082bd16d11d7" }] });<-- snip -->var listView = $("#listView").kendoListView({ dataSource: workflowSource, template: kendo.template($("#dataSource-template").html()) }).delegate("#Save", "click", function(e) { e.preventDefault(); SaveForm(); // this method sends an ajax post to server and gets update });using System;using System.ComponentModel.DataAnnotations;namespace PosPayAndBankRec.Models.Validators{ public class Date { public enum ValidationType { RangeValidation, Compare } public class DateValidationAttribute : ValidationAttribute { private ValidationType _validationType; private DateTime? _fromDate; private DateTime _toDate; private string _defaultErrorMessage; private string _propertyNameToCompare; public DateValidationAttribute(string message, string compareWith = "") { _propertyNameToCompare = compareWith; _defaultErrorMessage = message; } protected override ValidationResult IsValid(object value, ValidationContext validationContext) { var baseProperyInfo = validationContext.ObjectType.GetProperty(_propertyNameToCompare); DateTime startDate; bool NotValid = false; if (baseProperyInfo.GetValue(validationContext.ObjectInstance, null) is DateTime) { startDate = (DateTime)baseProperyInfo.GetValue(validationContext.ObjectInstance, null); if (value != null) { DateTime thisDate = (DateTime)value; if (thisDate <= startDate) { NotValid = true; } } else if (value == null) { //From date as a value but not the to date NotValid = false; } } else { //To date not a date and we have a from date if (value != null) { NotValid = true; } } //return validation result if (NotValid == false) { return null; } else if (NotValid == true) { string message = string.Format(_defaultErrorMessage, validationContext.DisplayName);//, displayAttr.Name); return new ValidationResult(message); } return null; } } }}[Date.DateValidation("Deactivation Date should be greater than the Activation Date.", compareWith: "brActivationDate")]public Nullable<System.DateTime> brDeactivationDate { get; set; } <td> @Html.EditorFor(model => model.brActivationDate) @Html.ValidationMessageFor(model => model.brActivationDate) </td> <td> @Html.EditorFor(model => model.brDeactivationDate) @Html.ValidationMessageFor(model => model.brDeactivationDate) </td>
var companyId = parseInt(@ViewBag.CompanyID);var dataSource = new kendo.data.DataSource({ type: 'aspnetmvc-ajax', transport: { create: { url: '@Url.Action("CreateHost", "Security", new { area = "" })', dataType: 'json' }, read: { url: '@Url.Action("GetHosts", "Security", new { area = "" })', data: { companyId: companyId }, dataType: 'json', type: 'GET' }, update: { url: '@Url.Action("UpdateHost", "Security", new { area = "" })', dataType: 'json' }, destroy: { url: '@Url.Action("DeleteHost", "Security", new { area = "" })', dataType: 'json' } }, schema: { model: { id: 'HostID', fields: { HostID: { type: 'number', editable: false }, StartIP: { type: 'string', editable: true, validation: { required: { message: 'Start IP is required' }, validIP: function (input1) { input1.attr('data-validIP-msg', 'Invalid IP address'); return ipRegEx.test(input1.val()); }, validIPRange: function (input1) { if (input1.is('input[id=StartIP]')) { input1.attr('data-validIPRange-msg', 'Start IP must be smaller than End IP'); var input2 = input1.closest('input[id=EndIP]'); var d1 = input1.val().split('.'); var d2 = input2.val().split('.'); var n1 = ((((((+d1[0]) * 256) + (+d1[1])) * 256) + (+d1[2])) * 256) + (+d1[3]); var n2 = ((((((+d2[0]) * 256) + (+d2[1])) * 256) + (+d2[2])) * 256) + (+d2[3]); return n1 >= n2; } return true; } } }, EndIP: { type: 'string', editable: true, validation: { required: { message: 'End IP is required' }, validIP: function (input2) { input2.attr('data-validIP-msg', 'Invalid IP address'); return ipRegEx.test(input2.val()); }, validIPRange: function (input2) { if (input2.is('input[id=EndIP]')) { input2.attr('data-validIPRange-msg', 'End IP must be greater than Start IP'); var input1 = input2.closest('input[id=StartIP]'); var d1 = input1.val().split('.'); var d2 = input2.val().split('.'); var n1 = ((((((+d1[0]) * 256) + (+d1[1])) * 256) + (+d1[2])) * 256) + (+d1[3]); var n2 = ((((((+d2[0]) * 256) + (+d2[1])) * 256) + (+d2[2])) * 256) + (+d2[3]); return n1 >= n2; } return true; } } }, StatusID: { type: 'number', editable: false, defaultValue: 3 }, CreatedOn: { type: 'date', editable: false, defaultValue: new Date() } } }, data: 'Data', total: 'Total' }, batch: false, pageSize: 30, serverPaging: true, serverFiltering: true, serverSorting: true});var grid = $('#HostsGrid').kendoGrid({ dataSource: dataSource, toolbar: ['create'], columns: [ { field: 'StatusID', title: 'Status', editable: false, filterable: false, sortable: true, template: '#= formatStatus(StatusID, true, "html") #', width: 97 }, { field: 'StartIP', title: 'Start IP', editable: true, filterable: false, sortable: false }, { field: 'EndIP', title: 'End IP', editable: true, filterable: false, sortable: false }, { field: 'CreatedOn', title: 'Added On', editable: false, filterable: true, sortable: true, format: '{0:MM/dd/yyyy hh:mm tt}', width: 150 }, { command: ["edit", "destroy"], title: ' ', width: 200 }, ], columnMenu: true, editable: 'inline', height: 250, filterable: true, pageable: { // Disable traditional paging, we are using virtual scrolling (which does the paging) previousNext: false, numeric: false, // Show the refresh button in the pager refresh: true }, scrollable: { virtual: true }, sortable: true });$("#chartDetails").kendoChart({ chartArea: { margin: 0, height: 550 }, theme: $(document).data("kendoSkin") || "BlueOpal", dataSource: kendoDataSource, title: { text: chartChangesTitle }, legend: { visible: false, position: "bottom" }, seriesDefaults: { labels: { template: "#= kendo.format('{0} - {1:P}', category, percentage)#", visible: true }, stacked: false }, series:[ { type: "pie", field: "InitialVolume", categoryField: "AttributeValue", name: "Initial" }, { type: "pie", field: "ProposedVolume", categoryField: "AttributeValue", name: "Proposed" } ], categoryAxis: { field: "AttributeValue" }, tooltip: { visible: true, template: "#= kendo.format('{0} - {1:P}', category, percentage)#" } });