Telerik Forums
UI for ASP.NET MVC Forum
1 answer
212 views

I'm trying to figure out how to populate a dropdown list when editing a ListView item. I'm binding to a ViewModel that contains an IEnumerable<SelectListItem>. On other pages without a ListView, I do something like below, however I'm not sure what action I can use to set up the model so that I have access to it when editing using the ListView.  I tried looping through each item in the Read action and setting States there, which is definitely inefficient, but regardless didn't work.  Any ideas?

public IActionResult Index()
{
    var model = _service.FindById(1));
    model.States = (_lookupService.GetStates());
    return View(model);
}

<select asp-for="StateId" asp-items="Model.States" class="form-control">
    <option value=""></option>
</select>
Vasil
Telerik team
 answered on 01 Sep 2016
3 answers
415 views

Hello,

In HTML helpers we could for example write:

@(Html.Kendo()
     .DatePicker()
     .Name("datepicker")
     .Deferred()
)
 
...
 
@section scripts {
    @Html.Kendo().DeferredScripts()
}

 

To have scripts deferred. How can we accomplish the same thing with tag helpers?

<kendo-datepicker name="datepicker" />

 

Thanks,

Alaa

Marin
Telerik team
 answered on 01 Sep 2016
1 answer
209 views

I'm looking to customize the paging of the ListView to have an infinite scroll (loading next group when getting to the bottom). Similar to the functionality offered in the grid. Is there any way to achieve this? It kind of looks like the ASP.NET AJAX listview has the ability to customize the pager. Is there any way to go about this?

 

Thanks

Rumen
Telerik team
 answered on 01 Sep 2016
3 answers
121 views
Hello I have a grid in my razor view,
I have added these resources
<link rel="stylesheet" href="@Url.Content("~/Content/KendoThemes/kendo.common.min.css")">
    <link rel="stylesheet" href="@Url.Content("~/Content/KendoThemes/kendo.rtl.min.css")">
    <link rel="stylesheet" href="@Url.Content("~/Content/KendoThemes/kendo.default.min.css")">
 
<script src="@Url.Content("~/Scripts/jquery.min.js")"></script>
    <script src="@Url.Content("~/Scripts/kendo.web.min.js")"></script>
    <script src="@Url.Content("~/Scripts/kendo.aspnetmvc.min.js")"></script>


here is my grid

  
@(Html.Kendo().Grid<Nop.Web.Models.Customer.CustomerInfoModel>()
    .Name("Grid")   
    .Columns(columns => {       
        columns.Bound(p => p.Active);
       // columns.Bound(p => p.cbSubscriptions).ClientTemplate("#=Employee.EmployeeName#");
        columns.Bound(p => p.cbSubscriptions);
        columns.Bound(p => p.FirstName);
        columns.Command(command => { command.Edit(); command.Destroy(); }).Width(200);   
    })   
    .ToolBar(toolBar => toolBar.Create())
    .Editable(editable => editable.Mode(GridEditMode.InLine))
    .Pageable()
    .Sortable()
    .Scrollable()
            .DataSource(dataSource => dataSource
                .Ajax()
                .Events(events => events.Error("error_handler"))
                .Model(model => model.Id(p => p.Id))
                        .Create(update => update.Action("EditingInline_Create", "Customer"))
                        .Read(read => read.Action("UsersList", "Customer"))
                .Update(update => update.Action("EditingInline_Update", "Grid"))
                .Destroy(update => update.Action("EditingInline_Destroy", "Grid"))
            )
)
<script type="text/javascript">
    function error_handler(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);
        }
    }
</script>

This works fine. it calls my action in controller to read the data, but the problem is that, it is displaying any rows in grid, even the controller returns the record. I have checked the console, there is no script error, and my network tab shows that these data has been transferred from the server. 

  1. data[{Email:familymanager1_user1@gmail.com, AllowUsersToChangeUsernames:false, UsernamesEnabled:false,…},…]
    1. 0{Email:familymanager1_user1@gmail.com, AllowUsersToChangeUsernames:false, UsernamesEnabled:false,…}
    2. 1{Email:familymanager1_user2@gmail.com, AllowUsersToChangeUsernames:false, UsernamesEnabled:false,…}
    3. 2{Email:familymanager1_user3@gmail.com, AllowUsersToChangeUsernames:false, UsernamesEnabled:false,…}
    4. 3{Email:as@sad.com, AllowUsersToChangeUsernames:false, UsernamesEnabled:false, Username:aasasasasas687,…}
  2. total4

Am I missing something to add. 
Rosen
Telerik team
 answered on 31 Aug 2016
5 answers
1.2K+ views

Hi i am binding my kendo grid with DataTable and trying to display some columns as checkbox using clienttemplate. However every time i am trying i am getting error doing that.

Does anyone know how i can achieve this?

I have attached the mockup of image what im trying to achieve i.e. grid-mockup.jpg. 

The error message i get is: Uncaught ReferenceError: ColumnName is not defined

Here is my Razor code:

@using Kendo.Mvc.UI
@model System.Data.DataTable
 
@(Html.Kendo().Grid<dynamic>()
    .Name("Grid")
    .Columns(columns =>
    {
        foreach (System.Data.DataColumn column in Model.Columns)
        {
            if (column.ColumnName != "SupplierNumber" && column.ColumnName != "CustomerItemNumber")
            {
                columns.Bound(column.ColumnName).ClientTemplate("<input type='checkbox' disabled #= ColumnName == 'True' ? checked='checked' : '' # />");
            }
            else
            {
                columns.Bound(column.ColumnName);
            }
        }
        columns.Command(cmd => cmd.Edit());
    })
    .Pageable()
    .Sortable()
    .Editable(ed => ed.Mode(GridEditMode.PopUp))
    .Filterable()
    .Groupable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .Model(model =>
        {
            var id = Model.PrimaryKey[0].ColumnName;
            model.Id(id);
            foreach (System.Data.DataColumn column in Model.Columns)
            {
                var field = model.Field(column.ColumnName, column.DataType);
                if (column.ColumnName == id)
                {
                    field.Editable(false);
                }
 
            }
        })
        .Read(read => read.Action("Read", "Home"))
        .Update(update => update.Action("Update", "Home"))
    )
)

Konstantin Dikov
Telerik team
 answered on 31 Aug 2016
1 answer
224 views
We are using ASP.NET MVC and have a grid with a date column which as a filter. The date filter has datepickers. In the filter datepickers, is there a way to prevent the user from selecting some minimum date (like two years ago).
Pavlina
Telerik team
 answered on 30 Aug 2016
1 answer
1.7K+ views

I am trying to get a Kendo DropDownList—declared inside of a Kendo Template script block—to automatically select an item from its list when a data value is provided to the template. I’m not having any luck doing this because I don’t understand how to plumb this particular case. My project has many other Kendo DropDownList controls, and they work just fine, but they are not declared inside of any Kendo Templates.

Basically, I have a parent Kendo Grid with the following declaration (irrelevant Razor omitted for clarity):

@(Html.Kendo().Grid<DocumentUploadViewModel>()
         .ClientDetailTemplateId("documentUploadTemplate")

My intention is to provide an editor template for the grid consisting of a Kendo Template script block. At the moment, that template looks like this:

<script id="documentUploadTemplate" type="text/kendo-tmpl">
    <div>
        <p>ID: ${Id}</p>
        <p>Document Type ID: ${DocumentTypeId}</p>
        <p>Document Type Name: ${DocumentTypeName}</p>
        <p>Path: ${Path}</p>
        <p>FileName: ${FileName}</p>
        <p>MIME Type: ${MimeType}</p>
    </div>
    <div>
        @(Html.Kendo().DropDownList()
            .Name("uxDocumentTypeName#=Id#")
            .OptionLabel("Please Select...")
            .DataValueField("DocumentTypeId")
            .DataTextField("DocumentTypeName")
            .DataSource(s =>
            {
                s.Read(r =>
                {
                    r.Action("GetDocumentTypes""MyController");
                })
                .ServerFiltering(true);
            })
            .ToClientTemplate()
        )
    </div>
</script>

My parent grid, which is working fine, is bound to a populated DocumentUploadViewModel, and its field values are surfaced in the Kendo Template for debugging purposes. When I invoke my grid’s “edit” button, I see the selected grid item’s bound data appear correctly inside the DIV at the top of the presented template.

The drop-down itself is full of data from the DataSource.Read.Action call, and I can manually make selections. However, I am unsure how to wire the control so that it automatically selects the item specified by the passed-in “DocumentTypeId” field. I do see this field value rendering correctly in the DIV, and the visible ID matches one of the items found in the drop-down’s data.

Normally, I would write @Html.Kendo.DropDownListFor(m => m.DocumentTypeId) but I can’t get at the “model” passed into the Kendo template. I have tried .BindTo("#=DocumentUploadViewModel.DocumentTypeId") as well as other variations, to no avail.

Peter Milchev
Telerik team
 answered on 30 Aug 2016
4 answers
810 views

Hello, I am using Kendo Grid on my MVC site. Loading data using AJAX call. But, the data disappears right after loading. Below is a code for Grid control in the view. 

@(Html.Kendo().Grid<SomeViewModelClass>()
            .Name("criteriaGridDiv")
            .AutoBind(false)
            .DataSource(datasource => datasource
                .Ajax()
                .Model(module =>
                    {
                        module.Id("ID");
                        module.Field("ScoreValue", typeof(int));
                        module.Field("ProjectID", typeof(string));
                        module.Field("CallMonitoringFormTypeID", typeof(int));
                        module.Field("FailureOnNotMet", typeof(bool));
                    })
               .Create(create => create.Action("Create_Criteria", "Permission", new { ModuleId = ViewBag.ModuleId }))
               .Update(update => update.Action("Edit_Criteria", "Permission", new { ModuleId = ViewBag.ModuleId }))
            )
            .Columns(columns =>
            {
                columns.Bound("ID").Visible(false);
                columns.Bound("ProjectID").Visible(false);
                columns.Bound("CallMonitoringFormTypeID").Visible(false);
                columns.Bound("CriteriaStatement").Title("Criteria");
                columns.Bound("ScoreValue").Title("Score Value").HtmlAttributes(new { style = "max-width:100px;" });
                columns.Bound("FailureOnNotMet").Title("Fail call if Not Met?").ClientTemplate("<input type='checkbox' #= FailureOnNotMet ? checked='checked':'' # class='failureOnNotMetCheck' />");
                columns.Command(command => command.Edit()).HtmlAttributes(new { style = "max-width:200px;" });
            })
            .ToolBar(toolbar => toolbar.Create().Text("Add New Criteria").HtmlAttributes(new { id = "radGridButton" }))
            .Editable(editable => { editable.Mode(GridEditMode.InLine); })            
            .HtmlAttributes(new { style = "max-width:90%;height:500px;" }))

Any thought on what I am missing here?

 

Thanks in advance. 

Kirtan

kirtan
Top achievements
Rank 1
 answered on 30 Aug 2016
1 answer
1.2K+ views

Hi, 

I need to display data in grid where it needs to display pre uploaded files in one of the column. User will also be able to edit the column and be able to delete or upload new attachment in the column. The user should be able to upload multiple files and the grid should display multiple files if the user has already uploaded previously. 

I have been able to display data in grid with one attachment but having hard time to figure out how to display multiple files and enable uploading multiple files in the grid.

Here is my code:

Razor View:
Test.cshtml

@using Kendo.Mvc.UI
 
@{
    ViewBag.Title = "Test";
}
 
<h2>Test</h2>
<input id="btnSearch" type="button" value="Search" class="btn btn-default icon-btn-input" />
 
<div class="col-sm-12">
    @(Html.Kendo().Grid<KendoUIApp3.Models.Certification>()
          .Name("Grid1")
          .Columns(columns =>
          {
              columns.Bound(e => e.SupplierNumber).Width("170px");
              columns.Bound(e => e.CustomerItemNumber).Width("170px");
          })
          .Editable(editable => editable.Mode(GridEditMode.InLine))
          .Pageable(x => x.PageSizes(new object[] { 10, 20, 50, 100, "All" }))
          .Reorderable(reorder => reorder.Columns(true))
          .AutoBind(false)
          .Selectable()
          .Sortable(sortable => sortable
              .AllowUnsort(true)
              .SortMode(GridSortMode.MultipleColumn))
          .Scrollable(scr => scr.Height(322))
          .Filterable(filterable => filterable
              .Extra(false)
              .Operators(operators => operators
                  .ForString(str => str.Clear()
                      .Contains("Contains")
                      .StartsWith("Starts with")
                      .IsEqualTo("Is equal to")
                      .IsNotEqualTo("Is not equal to"))))
          .Resizable(resize => resize.Columns(true))
          .DataSource(dataSource => dataSource
              .Ajax()
              .PageSize(10)
              .ServerOperation(false)
              .Read(read => read.Action("GetTestData", "Home"))
              .Model(model =>
              {
                  model.Id(p => p.SupplierNumber);
              }))
              .Events(events => events.Change("onRowSelect"))
          )
</div>
<br/><br/>
 
 
<div class="col-sm-12">
    @(Html.Kendo().Grid<KendoUIApp3.Models.CertificationDetail>()
          .Name("Grid2")
          .Columns(columns =>
          {
              columns.Command(command =>
              {
                  command.Edit().Text("Edit").HtmlAttributes(new { title = "Edit" });
              }).Width(180).Title("Action");
              columns.Bound(e => e.CertificationName).Width("170px");
              columns.Bound(e => e.Value).ClientTemplate("<input type='checkbox' disabled #=Value == true ? checked='checked' : '' # />").Width("170px");
              columns.Bound(e => e.Attachment).Width("300px").ClientTemplate("#if (Attachment != null && Attachment != '')" +
                                                                                            "{# <a href='#=Attachment#' target='_blank' class='btn-success'>View Attachment</a> #}#")
                                                                                            .EditorTemplateName("_UploadAttachment");
          })
          .Editable(editable => editable.Mode(GridEditMode.InLine))
          .Pageable(x => x.PageSizes(new object[] { 10, 20, 50, 100, "All" }))
          .Reorderable(reorder => reorder.Columns(true))
          .AutoBind(false)
          .Selectable()
          .Sortable(sortable => sortable
              .AllowUnsort(true)
              .SortMode(GridSortMode.MultipleColumn))
          .Scrollable(scr => scr.Height(322))
          .Filterable(filterable => filterable
              .Extra(false)
              .Operators(operators => operators
                  .ForString(str => str.Clear()
                      .Contains("Contains")
                      .StartsWith("Starts with")
                      .IsEqualTo("Is equal to")
                      .IsNotEqualTo("Is not equal to"))))
          .Resizable(resize => resize.Columns(true))
          .DataSource(dataSource => dataSource
              .Ajax()
              .PageSize(10)
              .ServerOperation(false)
              .Read(read => read.Action("GetDetailTestData", "Home").Data("selectedRow"))
              .Model(model =>
              {
                  model.Id(p => p.CertificationName);
              })
              .Update(update => update.Action("SaveCertificationDetail", "Home")))
    )
</div>
 
<script>
    $('#btnSearch').click(function(e) {
        $('#Grid1').data('kendoGrid').dataSource.read();
    });
 
    function selectedRow() {
        var grid = $("#Grid1").data("kendoGrid");
        var selectedItem = grid.dataItem(grid.select());
        var data = selectedItem ? selectedItem.toJSON() : {};
 
        return { model: data }
    }
 
    function onRowSelect() {
        $('#Grid2').data('kendoGrid').dataSource.read();
    }
</script>

_UploadAttachment.cshtml

@using Kendo.Mvc.UI
 
@(Html.Kendo().Upload()
        .Name("uploadedFiles")
        .Messages(m => m.Select("Upload Attachment"))
        .Async(a => a
                .Save("SaveAttachments", "Home")
                .Remove("RemoveAttachments", "Home")
            .AutoUpload(true)
        )
        .Multiple(false)
        //.Events(e => e.Success("onUploadSuccess"))
        //.Events(e => e.Upload("function(args){checkFileExtension(args,'.pdf');}"))
        .HtmlAttributes(new { accept = ".pdf" })
)

HomeController.cs

public ActionResult Test()
{
    return View();
}
 
public JsonResult GetTestData([DataSourceRequest] DataSourceRequest request)
{
    var certificationList = new List<Certification>();
    certificationList.Add(new Certification {SupplierNumber = "4343", CustomerItemNumber = "123344"});
    certificationList.Add(new Certification {SupplierNumber = "4242", CustomerItemNumber = "23453"});
    return Json(certificationList.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
 
public JsonResult GetDetailTestData([DataSourceRequest] DataSourceRequest request, Certification model)
{
    var certificationDetailLists = new List<CertificationDetail>();
 
    if (model.SupplierNumber == "4343")
    {
        certificationDetailLists.Add(new CertificationDetail {CertificationName = "ROHS", Value = true, Attachment = "Test.pdf"});
        certificationDetailLists.Add(new CertificationDetail {CertificationName = "REACH", Value = false});
    }
    else
    {
        certificationDetailLists.Add(new CertificationDetail { CertificationName = "RLIM", Value = false });
        certificationDetailLists.Add(new CertificationDetail { CertificationName = "RETIM", Value = true });
    }
    return Json(certificationDetailLists.ToDataSourceResult(request));
}
 
public ActionResult SaveAttachments(IEnumerable<HttpPostedFileBase> uploadedFiles)
{
    return Json(null);
}
 
public ActionResult RemoveAttachments(string[] fileNames)
{
    return Json("");
}

 

Model:

public class Certification
{
    public string SupplierNumber      { get; set; }
    public string CustomerItemNumber  { get; set; }
}
 
public class CertificationDetail
{
    public string CertificationName { get; set; }
    public bool Value               { get; set; }
    public string Attachment        { get; set; }
}

Danail Vasilev
Telerik team
 answered on 30 Aug 2016
1 answer
274 views

So I'm using 2016.1.412 Telerik controls.  MVC Grid UI.

 

I've followed this (http://www.telerik.com/support/code-library/checkbox-column-and-incell-editing) in order to get one of my boolean? columns to only show a checkbox and allow single click changes.  It works if I very carefully click on the check box.  If I click (within the cell) but next to the check box I get the drop list with the values "true, false, not set".  How do I get rid of the drop list?

 

1.columns.Bound(p => p.SendTo).Template(@<text></text>).ClientTemplate("<input type='checkbox' #= SendTo ? checked='checked':'' # class='sendtochkbx'/>")
2.  .Title(GridColumns.SendToPorzio)
3.  .Filterable(true)
4.  .HtmlAttributes(new { style = "text-align: center;" })
5.  .Sortable(false)
6.  .Width(150)
7.  .Locked(true)
8.  .HeaderTemplate("Send To Porzio <input type='checkbox' id='masterCheckBox' onclick='checkAll(this)'/>   ");

1.$("#SpendGrid").on('click',
2.    '.sendtochkbx',
3.    function () {
4.        var checked = $(this).is(':checked');
5.        var dataItem = grid.dataItem($(this).closest('tr'));  //grid is defined earlier in code block
6.        dataItem.set('SendTo', checked);
7.    });

Viktor Tachev
Telerik team
 answered on 30 Aug 2016
Narrow your results
Selected tags
Tags
Grid
General Discussions
Scheduler
DropDownList
Chart
Editor
TreeView
DatePicker
Upload
ComboBox
MultiSelect
ListView
Window
TabStrip
Menu
Installer and VS Extensions
Spreadsheet
AutoComplete
TreeList
Gantt
PanelBar
NumericTextBox
Filter
ToolTip
Map
Diagram
Button
PivotGrid
Form
ListBox
Splitter
Application
FileManager
Sortable
Calendar
View
MaskedTextBox
PDFViewer
TextBox
Toolbar
MultiColumnComboBox
Dialog
DropDownTree
Checkbox
Slider
Switch
Notification
ListView (Mobile)
Pager
Accessibility
ColorPicker
DateRangePicker
Wizard
Security
Styling
Chat
MediaPlayer
TileLayout
DateInput
Drawer
SplitView
Template
Barcode
ButtonGroup (Mobile)
Drawer (Mobile)
ImageEditor
RadioGroup
Sparkline
Stepper
TabStrip (Mobile)
GridLayout
Badge
LinearGauge
ModalView
ResponsivePanel
TextArea
Breadcrumb
ExpansionPanel
Licensing
Rating
ScrollView
ButtonGroup
CheckBoxGroup
NavBar
ProgressBar
QRCode
RadioButton
Scroller
Timeline
TreeMap
TaskBoard
OrgChart
Captcha
ActionSheet
Signature
DateTimePicker
AppBar
BottomNavigation
Card
FloatingActionButton
Localization
MultiViewCalendar
PopOver (Mobile)
Ripple
ScrollView (Mobile)
Switch (Mobile)
PivotGridV2
FlatColorPicker
ColorPalette
DropDownButton
AIPrompt
PropertyGrid
ActionSheet (Mobile)
BulletGraph
Button (Mobile)
Collapsible
Loader
CircularGauge
SkeletonContainer
Popover
HeatMap
Avatar
ColorGradient
CircularProgressBar
SplitButton
StackLayout
TimeDurationPicker
Chip
ChipList
DockManager
ToggleButton
Sankey
OTPInput
ChartWizard
SpeechToTextButton
InlineAIPrompt
TimePicker
StockChart
RadialGauge
ContextMenu
ArcGauge
AICodingAssistant
+? more
Top users last month
Top achievements
Rank 1
Iron
Iron
Iron
Rob
Top achievements
Rank 3
Bronze
Bronze
Iron
ivory
Top achievements
Rank 1
Iron
Nurik
Top achievements
Rank 2
Iron
Iron
YF
Top achievements
Rank 1
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Top achievements
Rank 1
Iron
Iron
Iron
Rob
Top achievements
Rank 3
Bronze
Bronze
Iron
ivory
Top achievements
Rank 1
Iron
Nurik
Top achievements
Rank 2
Iron
Iron
YF
Top achievements
Rank 1
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?