Telerik Forums
UI for ASP.NET MVC Forum
2 answers
201 views

Hi,

I am working on Asp.Net MVC Grid (MVC 5 2017.1.223)  Please see the below code details.

@(Html.Kendo().Grid<EditableTest>()
        .Name("Grid")
        .Columns(columns =>
        {
            columns.Bound(c => c.testID).Hidden();
            columns.Bound(c => c.testDesc).Title("City Description");
            columns.Bound(c => c.testCode).Title("Country");
            columns.Command(command => { command.Edit(); command.Destroy(); }).Width(250);
        })
        .ToolBar(toolbar => { toolbar.Create(); })
        .Editable(ed => ed.Mode(GridEditMode.PopUp))
        .Sortable()
        .Pageable(pageable => pageable
            .Refresh(true)
            .PageSizes(true)
            .ButtonCount(5))
        .Filterable()
        .DataSource(dataSource => dataSource
            .Custom()
            .PageSize(20)
            .Schema(schema => schema.Model(m => m.Id(p => p.testID)))
            .Transport(transport =>
            {
                transport.Read(read => read.Url("http://localhost:60018/api/testapi").DataType("json"));
                transport.Create(create => create.Url("http://localhost:60018/api/testapi").Type(HttpVerbs.Post).DataType("json"));
                transport.Update(Update => Update.Url("http://localhost:60018/api/testapi").Type(HttpVerbs.Put).DataType("json"));
                transport.Destroy(del => del.Url("http://localhost:60018/api/testapi").Type(HttpVerbs.Delete).DataType("json"));                
            })
        )
)

 

This is custom Grid with web api. Read and create is work fine but update and destroy is not working. Is there any missing code. I understand for Put and Delete need to pass parameter thru web Api. I think I already added scheme for ID.  Appreciate your help on this. :)

 

Regards
Suman G

Suman
Top achievements
Rank 1
 answered on 17 Jul 2017
2 answers
459 views

Hi,

I've a kendo grid with a delete option for each row. Delete an item and it is removed from the list and the dete from the data context performs successfully. However when I delete another row, it tries to perform the delete of the first deleted row a 2nd time, cant find the entity and throws an error, so the 2nd item is not deleted.

Code as follows -

View

 

@(Html.Kendo().Grid<OriginGreen.Areas.Portal.Models.DisplayArticleViewModel>()
        .Name("Article")
        .Columns(columns =>
        {
            columns.Bound(p => p.Id).Title("Id").Visible(false);
            columns.Bound(p => p.Title).Title("Title").Width(100);
            columns.Bound(p => p.AticleTypeDesc).Title("Article Type").Width(100); ;
            columns.Bound(p => p.AticleCodeType).Title("Article Type").Visible(false);
            columns.Bound(p => p.PublishedOn).Format("{0:dd/MM/yyyy HH:mm:ss}").Width(150).Title("Date Published").Width(100);
            columns.Command(command => command.Destroy()).Width(40);
            columns.Template(x => { }).ClientTemplate("<a class='k-button k-button-icontext k-grid-EditArticle' href='" + Url.Action("Edit", new { id = "#= Id #" }) + "'>Edit</a>").Width(30);
 
 
        })
        .Events(e => e.DataBound("onRowBound")
        )
        .Pageable()
        .Sortable()
        .Scrollable()
        .Filterable(ftb => ftb.Mode(GridFilterMode.Row))
        .DataSource(dataSource => dataSource
                                .Ajax()
                                .ServerOperation(false)
                                .PageSize(10)
                                .Batch(true)
                                .Model(model =>
                                {
                                    model.Id(p => p.Id);
                                    model.Field(p => p.Title);
                                })
                                .Read(read => read.Action("DisplayArticlesRead", "Article").Type(HttpVerbs.Get))
                                .Destroy(destroy => destroy.Action("ArticleDestroy", "Article").Type(HttpVerbs.Post))
                            )
 
    )

 

Server-side -

 

[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult ArticleDestroy([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<DisplayArticleViewModel> articles)
        public ActionResult ArticleDestroy([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<DisplayArticleViewModel> articles)
        {
            if (articles.Any())
            {
                foreach (var article in articles)
                {
                    // Delete Any Article Attachments first, so as not to leave orphaned records
                    var articleAttachments = _articleRepository.GetArticleAttachments(article.Id);
 
                    if (articleAttachments.Count > 0)
                    {
                        foreach (var articleAttachment in articleAttachments)
                        {
                            _articleRepository.DeleteAttachment(articleAttachment.AttachmentId);
                        }
                    }
 
                    _articleRepository.DeleteArticle(article.Id);
                }
            }
 
            //return Json(articles.ToDataSourceResult(request, ModelState));
            return Json(articles.ToDataSourceResult(request, ModelState));
        }

 

I've read up on it and it seems I need to return a success indicator to the grid but I cant work out how to do this in an mvc setup.

Any help greatly appreciated.

Terry.

 

Stefan
Telerik team
 answered on 17 Jul 2017
2 answers
556 views

How can I specify the id of the record as an optional parameter in the UrlAction?

@model IEnumerable<proITdesk.Database.Models.Address>

...

<script type="text/x-kendo-tmpl" id="template">

    <a href='@Url.Action("Details", "Addresses", new { Id = "#=Id#" }.ToString())'>
        <div class="widget-primary">
            <h4 style="text-align:center">#:Name#</h4>
            <img src="@Url.Content("~/content/web/foods/")#:Id#.jpg" alt="#:Name# Image" />
        </div>
    </a>
</script>     
Harald
Top achievements
Rank 2
 answered on 16 Jul 2017
8 answers
370 views

My website was working fine till last week, during which there seems to have been a chrome update.

The issue is right when my page loads, we have a search field, but the cursor does not display, even after i click with mouse pointer on the text box. I am able to type and do search, but the cursor does not appear, which says there is something wrong.

But once inside, I have another masterpage and here there are few jQuery validations. But even after the user enters the required values, keep getting "Those values required" error message. We use jquery validate, but even after we tried kendo validator the same issue remains. I cannot proceed from this page.

Once i close the browser and come back, the issue seems to be resolved some time. But its very inconsistent and we cannot suggest that to production. FireFox has no issues, so its something related with Chrome.

If i am loading the page in developer mode (F12), there seems to be no issue too. This happens only in the deployed version and right after clearing the cache of the browser. It has to be do with some scripts not loading, but I am not able to test it since, all scripts are loaded and working when doing it in developer mode.

IT
Top achievements
Rank 1
 answered on 14 Jul 2017
10 answers
224 views

I have a treeview set up as below ("treeview"), and the rendered checkboxes are not styled according to the theme (bootstrap).  If I set up another treeview with local data ("treeview1"), they render as themed.  Any hints as to how i can get the checkboxes to adhere to the theme when using a datasource?

 

NOT THEMED:

@(Html.Kendo().TreeView()
        .Name("treeview")
        .Checkboxes(checkboxes => checkboxes.Name("checkedCategories")
        .CheckChildren(true))
        .Events(events => events.Check("onCheck"))
        .DataTextField("description")
        .DataSource(dataSource => dataSource
            .Model(m => m.HasChildren("HasChildren").Children("Children"))
            .Read(read => read.Action("GetFilters", "ProductList")))
          )

THEMED:

@(Html.Kendo().TreeView()
        .Name("treeview1")
        .Checkboxes(checkboxes => checkboxes.Name("checkedCategories"))
        .Items(treeview =>
       {
           treeview.Add().Text("Asset Class").Id("1-1")
               .Expanded(true)
               .Items(category =>
               {
                   category.Add().Text("My first thing").Id("2-1");
                   category.Add().Text("My Second Thing").Id("2-2");
               });
       }))

Magdalena
Telerik team
 answered on 14 Jul 2017
9 answers
308 views
Kendo MVC 2014.3.1516

Bug:
If you use a MultiSelectFor in an EditorTemplate, the grid's "save" event will only fire once for that cell.  The second time you update the same cell (by picking an additional item or removing an item from the MultiSelect list), the grid's save event is not called.
Georgi
Telerik team
 answered on 14 Jul 2017
2 answers
222 views

Hi, 

I have created an ASP.NET MVC c# project and I have added two grids using the hierarchy option.  parent grid contains Orders Header records and child grid contains Orders details records, into grid child we need to use an telerik autocomplete mvc control here start the problem because is not working.  The two grids has been created using Razor syntax into the view, and the idea is create a CRUD into Parent Grid and into Child Grid, I mean when  you create a new header row (parent grid) you can add rows into child grid (master - detail behavior)

Using Column.Bound() into child grid, I have tried to use the ".Template" and ".ClientTemplate" method and even EditorTemplateName (using other cshtml view) but is not working.  Please note the autocomplete control must be visible when you create a new record or edit old record in detail grid.

 

What is the best way to do this task?

 

Any help, many thanks.

Preslav
Telerik team
 answered on 14 Jul 2017
7 answers
350 views

Hi,

I am using http://demos.telerik.com/aspnet-mvc/upload/chunkupload to upload video file around 2 GB using chunk of 10 MB, all setting in config has been done.

It worked on Firefox, Chrome and IE with no issue, great tool.

But when I tried to upload using safari on windows 10 OS, the same code do not worked and it seems it is in infinite loop and file size keeps increasing...

Config setting is as below:

 <httpRuntime targetFramework="4.5" maxRequestLength="2147483647"/>

<security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="2147483647"/>
      </requestFiltering>
 </security>

.cshtml:

@(Html.Kendo().Upload()
    .Name("files")
    .Async(a => a
        .Save("ChunkSave", "Upload")
        .Remove("Remove", "Upload")
        .AutoUpload(true)
        .ChunkSize(20000000) // Will separate the file into chunks of size 1100 bytes.
        .Concurrent(true) // Will upload all files simultaneously.
        .AutoRetryAfter(300) // Will attempt a failed chunk upload after 300ms.
        .MaxAutoRetries(4) // Will attempt the same failed chunk upload 4 times.
    )
)

C# code:
  public void AppendToFile(string fullPath, Stream content)
        {
            try
            {
                using (FileStream stream = new FileStream(fullPath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
                {
                    using (content)
                    {
                        content.CopyTo(stream);
                    }
                }
            }
            catch (IOException ex)
            {
                throw ex;
            }
        }

        public ActionResult ChunkSave(IEnumerable<HttpPostedFileBase> files, string metaData)
        {
            if (metaData == null)
            {
                return Save(files);
            }

            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(metaData));
            var serializer = new DataContractJsonSerializer(typeof(ChunkMetaData));
            ChunkMetaData chunkData = serializer.ReadObject(ms) as ChunkMetaData;
            string path = String.Empty;
            // The Name of the Upload component is "files"
            if (files != null)
            {
                foreach (var file in files)
                {
                    path = Path.Combine(Server.MapPath("~/App_Data"), chunkData.FileName);

                    AppendToFile(path, file.InputStream);
                }
            }

            FileResult fileBlob = new FileResult();
            fileBlob.uploaded = chunkData.TotalChunks - 1 <= chunkData.ChunkIndex;
            fileBlob.fileUid = chunkData.UploadUid;

            return Json(fileBlob);
        }


        public ActionResult Save(IEnumerable<HttpPostedFileBase> attachments)
        {
            //The Name of the Upload component is "attachments".
            foreach (var file in attachments)
            {
                //Some browsers send file names with a full path. You only care about the file name.
                var fileName = Path.GetFileName(file.FileName);
                var destinationPath = Path.Combine(Server.MapPath("~/App_Data"), fileName);

                file.SaveAs(destinationPath);
            }

            //Return an empty string to signify success.
            return Content("");
        }

Can any one help me if I did something wrong?

Nencho
Telerik team
 answered on 14 Jul 2017
2 answers
382 views

Hi

I have a kendo template that uses resources and one of the german resorces has an umlaut. The template is loaded using kendo.template and kendo.render.

I found a link that complains about this http://www.telerik.com/forums/german-umlauts-not-working-in-listview%27s-client-template-when-coming-from-resources but the solution from there does not work: Html.Raw

I have tried also 
@Html.Raw(HttpUtility.HtmlEncode(Resources.GridSaveChanges).Replace("#", "\\#"))

but it does not work.

Alexandra
Top achievements
Rank 1
 answered on 14 Jul 2017
3 answers
167 views

I currently have a dropdown list with Virtualization which shows the dropdowns as follows "First Middle Last (XXX-XX-XXXX)". When typing in the seach box I can successfully search based on name or SSN with dashes. However I would like to be able to search on SSN without dashes. I tried attaching another property to the viewmodel sent from the lookup controller but am unable to figure out how to achieve what I want while still preserving the dashes in the UI. My thought was to catch the filter and apply regex on it serverside that if only number had been entered then to add dashes after 3rd and 5th character which would allow me get my desired output.

Here is the View:

01.@Html.LabelFor(model => model.VisitorID)
02.                    @(Html.Kendo().DropDownList()
03.                      .Name("VisitorID")
04.                      .DataTextField("Value")
05.                      .DataValueField("ID")
06.                      .MinLength(2)
07.                      .HtmlAttributes(new { style = "width:100%" })
08.                      .Height(290)
09.                      .Filter(FilterType.Contains)
10.                      .DataSource(source =>
11.                      {
12.                          source.Custom()
13.                              .ServerFiltering(true)
14.                              .ServerPaging(true)
15.                              .PageSize(80)
16.                              .Type("aspnetmvc-ajax") //Set this type if you want to use DataSourceRequest and ToDataSourceResult instances
17.                              .Transport(transport =>
18.                              {
19.                                  transport.Read("Virtualization_GetVisitor", "Lookups");
20.                              })
21.                              .Schema(schema =>
22.                              {
23.                                  schema.Data("Data") //define the [data](http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#configuration-schema.data) option
24.                                        .Total("Total"); //define the [total](http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#configuration-schema.total) option
25.                              });
26.                      })
27.                      .Virtual(v => v.ItemHeight(26).ValueMapper("VisitorLookups"))
28.                      .NoDataTemplate("<a onclick=\"addNewEntityPartial(\'Visitor\');\">Add a new Visitor</a>")
29.                    )
30.                    @Html.ValidationMessageFor(model => model.VisitorID)

 

The C# For virtualization:

01.#region VisitorLookup
02.            public ActionResult Virtualization_GetVisitor([DataSourceRequest] DataSourceRequest request)
03.            {
04.                return Json(GetVisitor().ToDataSourceResult(request));
05.            }
06.            public ActionResult Visitor(int[] values)
07.            {
08.                var indices = new List<int>();
09. 
10.                if (values != null && values.Any())
11.                {
12.                    var index = 0;
13. 
14.                    foreach (var visitor in GetVisitor())
15.                    {
16.                        if (values.Contains(visitor.ID))
17.                        {
18.                            indices.Add(index);
19.                        }
20. 
21.                        index += 1;
22.                    }
23.                }
24.                return Json(indices, JsonRequestBehavior.AllowGet);
25.            }
26. 
27.            private IQueryable<LookupViewModel> GetVisitor()
28.            {
29.                var ro = User.IsInRole("ReadOnly");
30.            return db.Visitors.Select(visitor => new LookupViewModel
31.            {
32.                ID = visitor.ID,
33.                Value = (visitor.Flag == true ? "FLAGGED " : "") +
34.                        visitor.FirstName + " " +
35.                        visitor.MiddleName + " " +
36.                        visitor.LastName +
37.                        " (" + (ro ? "XXX-XX-XXXX" : visitor.SSN.Replace("-", "")) + ") " +
38.                        (visitor.Flag == true ? "FLAGGED" : ""),
39.                SSN = (ro ? "XXX-XX-XXXX" : visitor.SSN.Replace("-", ""))
40.                });
41.            }
42.            #endregion

 

I feel like I'm very close but am not quite sure how to modify the filter in the request on line 4 (second snippet) to achieve what i want.

Below was the path I was on:

01.public ActionResult Virtualization_GetVisitor([DataSourceRequest] DataSourceRequest request)
02.        {
03.            Regex regex = new Regex(@"[\d]");
04.            foreach (var filter in request.Filters)
05.            {
06.                if (regex.IsMatch(((FilterDescriptor)filter).ConvertedValue.ToString()))
07.                {
08. 
09.                    if (((FilterDescriptor)filter).Value.ToString().Length > 2)
10.                    {
11.                        ((FilterDescriptor)filter).Value.Insert(2, "-");
12.                    }
13.                    if (((FilterDescriptor)filter).Value.ToString().Length > 4)
14.                    {
15.                        ((FilterDescriptor)filter).Value.Insert(4, "-");
16.                    }
17.                }
18.            }
19.            return Json(GetVisitor().ToDataSourceResult(request));
20.        }

But that does not compile since Insert can't be made on a Object.

 

Any help?

Veselin Tsvetanov
Telerik team
 answered on 14 Jul 2017
Narrow your results
Selected tags
Tags
Grid
General Discussions
Scheduler
DropDownList
Chart
Editor
TreeView
DatePicker
ComboBox
Upload
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
Accessibility
ListView (Mobile)
Pager
ColorPicker
DateRangePicker
Security
Wizard
Styling
Chat
DateInput
MediaPlayer
TileLayout
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
SegmentedControl
+? more
Top users last month
Boardy
Top achievements
Rank 2
Veteran
Iron
Benjamin
Top achievements
Rank 3
Bronze
Iron
Veteran
ivory
Top achievements
Rank 1
Iron
Iron
Rob
Top achievements
Rank 3
Bronze
Bronze
Iron
ClausDC
Top achievements
Rank 2
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Boardy
Top achievements
Rank 2
Veteran
Iron
Benjamin
Top achievements
Rank 3
Bronze
Iron
Veteran
ivory
Top achievements
Rank 1
Iron
Iron
Rob
Top achievements
Rank 3
Bronze
Bronze
Iron
ClausDC
Top achievements
Rank 2
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?