Completed
Last Updated: 30 Oct 2020 15:16 by ADMIN
Release 2020.R3.SP.next
Created by: Johannes
Comments: 0
Category: PanelBar
Type: Bug Report
0

Bug report

Reproduction of the problem

If an item is set to expanded="false" (see the "Storage" item in the snippet below) in the PanelBar's tag helper, it displays the "collapse" icon, instead of an "expand" icon:

<kendo-panelbar name="project">
	<items>
		<panelbar-item text="Storage" expanded="false">
			<items>
				<panelbar-item text="Wall Shelving"></panelbar-item>
				<panelbar-item text="Floor Shelving"></panelbar-item>
				<panelbar-item text="Kids Storag"></panelbar-item>
			</items>
		</panelbar-item>
		<panelbar-item text="Lights">
			<items>
				<panelbar-item text="Ceiling"></panelbar-item>
				<panelbar-item text="Table"></panelbar-item>
				<panelbar-item text="Floor"></panelbar-item>
			</items>
		</panelbar-item>
	</items>
</kendo-panelbar>

This is caused by incorrect classes being applied to the item. It should have the "k-panelbar-expand k-i-arrow-60-down" classes, instead it has the "k-panelbar-collapse k-i-arrow-60-up" classes.

Current behavior

"k-i-arrow-60-up" icon is displayed.

Expected/desired behavior

"k-i-arrow-60-down" icon is displayed.

Environment

  • Kendo UI version: 2020.2.617
  • jQuery version: x.y
  • Browser: [all]
Unplanned
Last Updated: 30 Oct 2020 13:05 by ADMIN
Created by: Daniel Grünberger
Comments: 0
Category: Grid
Type: Bug Report
1

I'm currently migrating a project from ASP.NET MVC to ASP.NET MVC Core.

In the server code I'm using a DataTable from the database which is converted to a DataSourceResult with ToDataSourceResult.

It worked fine in the ASP.NET MVC version, but the same code in the ASP.NET MVC Core version throws an exception when using aggregate functions.

System.InvalidOperationException: 'No generic method 'Sum' on type 'System.Linq.Enumerable' is compatible with the supplied type arguments and arguments. No type arguments should be provided if the method is non-generic. '

 

---

ADMIN EDIT

The UI for ASP.NET MVC and UI for ASP.NET Core come with their own data source assemblies that you should reference and use instead of the Telerik.DataSource package for that type of cases. The Telerik.DataSource package serves the needs of the UI for Blazor suite and might not suit all situations related to the Kendo JavaScript widgets.

Also, at this point, grouping with DataTables is not yet available (see here), and we recommend you consider using actual models, as is the standard practice in a Blazor app, or consider using ExpandoObject collections.

---

In Development
Last Updated: 30 Oct 2020 05:39 by ADMIN
Scheduled for 2020.R3.SP.next

Bug report

DropDownTreeItemModel does not properly pass its HtmlAttributes members on populating DropDownTree with BindTo()

Reproduction of the problem

In .Net Core application, implement the following view:

@(Html.Kendo().DropDownTree()
    .Name("kendoTreeItems")
    .BindTo((IEnumerable<DropDownTreeItemModel>)ViewBag.Items)
)

and the following controller:

public IActionResult Index()
{
    ViewBag.Items = GetItems();
    return View();
}

public IEnumerable<DropDownTreeItemModel> GetItems()
{
    IDictionary<string, string> attributes = new Dictionary<string, string>
    {
        { "style", "background: red" }
    };

            List<DropDownTreeItemModel> items = new List<DropDownTreeItemModel>
    {
        new DropDownTreeItemModel { Text = "Item 1", HtmlAttributes = attributes },
        new DropDownTreeItemModel { Text = "Item 2", HtmlAttributes = attributes },
        new DropDownTreeItemModel { Text = "Item 3", HtmlAttributes = attributes },
        new DropDownTreeItemModel { Text = "Item 4", HtmlAttributes = attributes },
    };

    return items;
}

Current behavior

The HTML attributes will not be passed to the DropDownTree items.

Expected/desired behavior

The HTML attributes should be passed and present in the DropDownTree items.

Environment

  • Kendo UI version: 2020.1.219
  • Browser: [all]
Declined
Last Updated: 29 Oct 2020 05:31 by ADMIN
Created by: Akesh Gupta
Comments: 0
Category: UI for ASP.NET Core
Type: Bug Report
0

Bug report

The StringExtensions -> ToCamelCase method(part of Kendo.Mvc.Extenstions) doesn't return the expected Camel case result.

  • More details in ticket # 1458202

Reproduction of the problem

Include the Kendo.Mvc.Extenstions namespace. Define the following in a controller:

        public IActionResult Index()
        {
            string test = "RANDOMStatusId";
            test = test.ToCamelCase();

            return View();
        }

Set a debugger and see the value of the "test" variable.

Current behavior

The returned from the ToCamelCase() method value is "rANDOMStatusId"
image

Expected/desired behavior

The expected result returned from the ToCamelCase() method value is "randomStatusId"

Environment

  • Kendo UI version: 2020.1.219
  • jQuery version: x.y
  • Browser: [all]
Completed
Last Updated: 28 Oct 2020 14:51 by ADMIN
Release 2020.R3.SP.next

Bug report

Reproduction of the problem

Reproducible in the demos.

  1. Click inside a cell in the table
  2. Click the "Delete row" button in the toolbar.
  3. Use a keyboard shortcut to "Undo" the delete action.
  4. Resize the table.
  5. Observe two sets of resize handles.

Current behavior

Resize handles duplication

Expected/desired behavior

No duplication of the resize handles

Environment

  • Kendo UI version: 2020.2.617
  • jQuery version: x.y
  • Browser: [Chrome]
Completed
Last Updated: 28 Oct 2020 14:33 by ADMIN
Release 2020.R3.SP.next
Created by: Cyril Iselin
Comments: 2
Category: AutoComplete
Type: Bug Report
0

We are upgraded from MVC 5 to MVC-Core and using now your core components (latest version).

In our AutoComplete box, we get now a NullReference exception, without changing anything at our codebase.

 

Generated Script from Kendo MVC-Core:

kendo.syncReady(function(){jQuery("#txtSearchForLink").kendoAutoComplete({"select":insertLink.searchResultSelected,"dataTextField":"Text","filter":"Contains","footerTemplate":jQuery('#searchResultFooterTemplate').html(),"minLength":0,"placeholder":"Suchen","template":jQuery('#searchResultTemplate').html(),"dataSource":{"type":"aspnetmvc-ajax","transport":{"read":{"url":"/Orphy/Search/GetQuickSearchData","data":insertLink.onAdditionalData}},"serverFiltering":true,"serverGrouping":true,"sort":[{"field":"Weight","dir":"desc"}],"group":[{"field":"GroupName","dir":"desc"}],"filter":[],"schema":{"data":"Data","model":{"id":"Id"}}}});});

 

Debugging:

-> context.Count == 0 -> so Null will returned
-> Here you access the property Memeber of Null ... ?

Call Stack:

System.NullReferenceException: Object reference not set to an instance of an object.
   at Kendo.Mvc.Infrastructure.Implementation.FilterNodeVisitor.Visit(PropertyNode propertyNode)
   at Kendo.Mvc.Infrastructure.Implementation.PropertyNode.Accept(IFilterNodeVisitor visitor)
   at Kendo.Mvc.Infrastructure.FilterDescriptorFactory.Create(String input)
   at Kendo.Mvc.UI.DataSourceRequestModelBinder.<>c__DisplayClass2_0.<CreateDataSourceRequest>b__3(String filter)
   at Kendo.Mvc.UI.DataSourceRequestModelBinder.TryGetValue[T](ModelMetadata modelMetadata, IValueProvider valueProvider, String modelName, String key, Action`1 action)
   at Kendo.Mvc.UI.DataSourceRequestModelBinder.CreateDataSourceRequest(ModelMetadata modelMetadata, IValueProvider valueProvider, String modelName)
   at Kendo.Mvc.UI.DataSourceRequestModelBinder.BindModelAsync(ModelBindingContext bindingContext)
   at Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BinderTypeModelBinder.<BindModelAsync>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.<BindModelAsync>d__11.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerBinderDelegateProvider.<>c__DisplayClass0_0.<<CreateBinderDelegate>g__Bind|0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeInnerFilterAsync>d__13.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.<InvokeNextExceptionFilterAsync>d__24.MoveNext() System.NullReferenceException: Object reference not set to an instance of an object.
   at Kendo.Mvc.Infrastructure.Implementation.FilterNodeVisitor.Visit(PropertyNode propertyNode)
   at Kendo.Mvc.Infrastructure.Implementation.PropertyNode.Accept(IFilterNodeVisitor visitor)
   at Kendo.Mvc.Infrastructure.FilterDescriptorFactory.Create(String input)
   at Kendo.Mvc.UI.DataSourceRequestModelBinder.<>c__DisplayClass2_0.<CreateDataSourceRequest>b__3(String filter)
   at Kendo.Mvc.UI.DataSourceRequestModelBinder.TryGetValue[T](ModelMetadata modelMetadata, IValueProvider valueProvider, String modelName, String key, Action`1 action)
   at Kendo.Mvc.UI.DataSourceRequestModelBinder.CreateDataSourceRequest(ModelMetadata modelMetadata, IValueProvider valueProvider, String modelName)
   at Kendo.Mvc.UI.DataSourceRequestModelBinder.BindModelAsync(ModelBindingContext bindingContext)
   at Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BinderTypeModelBinder.<BindModelAsync>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.<BindModelAsync>d__11.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerBinderDelegateProvider.<>c__DisplayClass0_0.<<CreateBinderDelegate>g__Bind|0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeInnerFilterAsync>d__13.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.<InvokeNextExceptionFilterAsync>d__24.MoveNext()

 

Thanks for helping me.

 

Cyril

Completed
Last Updated: 27 Oct 2020 16:43 by ADMIN
Release 2020.R3.SP.next

Bug report

Reproduction of the problem

  1. Adding a Wizard tag helper to a Grid's editor template throws an "Invalid or unexpected token" exception. No exception is thrown when using the Html helper.
<kendo-wizard name="wizard" on-done="onDone">
	<wizard-steps>
		<wizard-step title="Start">
			<wizard-step-buttons>
				<wizard-step-button name="next" text="Next"></wizard-step-button>
			</wizard-step-buttons>
			<wizard-step-content>
			</wizard-step-content>
		</wizard-step>
		<wizard-step title="User details">
			<wizard-step-buttons>
				<wizard-step-button name="previous" text="Previous"></wizard-step-button>
				<wizard-step-button name="done" text="Register"></wizard-step-button>
			</wizard-step-buttons>
			<wizard-step-content>
			</wizard-step-content>
		</wizard-step>
	</wizard-steps>
</kendo-wizard>
  1. For a sample project see Ticket ID: 1484465

Current behavior

js exception on using the Wizard tag helper in an editor template

Expected/desired behavior

no js exceptions on using the tag helper in an editor template

Environment

  • Kendo UI version: 2020.2.617
  • jQuery version: x.y
  • Browser: [all ]
Pending Review
Last Updated: 27 Oct 2020 07:32 by Isha

Hi,

I need vertical TabStrip with scrollable next and previous icons.

I noticed that previous and next options are not displaying for TabStrip in left tab position mode.
Although it works very well in top tab position mode.

The scrollable tabs functionality that displays scroll buttons on the left or the right side of the TabStrip is available only in "top" and "bottom" position. Its mentioned in below link:

https://docs.telerik.com/kendo-ui/controls/navigation/tabstrip/tabs#scrollable-tabs

 

In the sample

Here is the Dojo Sample attached:

https://dojo.telerik.com/opexUbEz/3 - Top Positioned Tabs (Arrow buttons are showing)

https://dojo.telerik.com/opexUbEz/4 - Left Positioned Tabs (Arrow buttons are not showing)

 

Please implement this feature ASAP. its business critical requirement.

 

Regards,

Isha Chib

Declined
Last Updated: 26 Oct 2020 10:01 by ADMIN

Bug report

Reproduction of the problem

  1. Run the attached sample project:
    TelerikAspNetCoreApp100.zip
  2. A child node is returned as checked from the server.
  3. Note the difference between the state of the parent node checkbox in the Core TreeView (incorrect) and in the Kendo UI TreeView (correct).

Current behavior

The parent node's state remains "unchecked".

Expected/desired behavior

The parent node's state should be "indeterminate".

Workaround:

Attach a DataBound event handler to the TreeView:

<kendo-treeview name="DataRestrictionTree" load-on-demand="false" datatextfield="Name" on-data-bound="onDataBound" >

In the handler call the TreeView's updateIndeterminate API method:

function onDataBound(e) {
	var treeview = $("#DataRestrictionTree").data("kendoTreeView");
	treeview.updateIndeterminate();
}

Environment

  • Kendo UI version: 2020.2.513
  • jQuery version: x.y
  • Browser: [all]
Completed
Last Updated: 23 Oct 2020 13:06 by ADMIN
Release 2020.R3.SP.next
Created by: Clarissa
Comments: 0
Category: FileManager
Type: Feature Request
0

The built-in upload components event cannot be handled through the TagHelper:

<kendo-filemanager name="filemanager">
  <upload on-upload="onUpload"></upload>
  ...      
</kendo-filemanager>

Completed
Last Updated: 20 Oct 2020 13:41 by ADMIN

Bug report

Reproduction of the problem

  1. Run the project attached on in 16.9.2020 in Ticket ID: 1484793
  2. Check the "Add 3rd Step" checkbox
  3. Navigate to the 3rd step - the Rating is unresponsive and its value cannot be changed

Current behavior

The Rating is unresponsive.

Expected/desired behavior

The Rating works properly.

Environment

  • Kendo UI version: 2020.2.617
  • jQuery version: x.y
  • Browser: [all ]
Unplanned
Last Updated: 20 Oct 2020 12:04 by ADMIN

The FileManager component makes the assumption that all files and directories can be uniquely adressed by name and path.

Unfortunately, this isn't true in many cases: identifying a specific file could require additional information (like database record ID or namespace) that cannot be provided globally for the page and therefore needs to be stored individually with each file entry inside the client's datamodel.

(In my case, different entities in the database have their own "virtual storage" where files are references as items stored in a cloud block storage service. This means that I can several files with the same name and path (but diffreent content) referenced in the database or even several files with the same name and folder linked to the same entity).

As a workaround, if there is no need to represent folder structure at all, the "path" field can be used to hold the database ID of the file and that field can then be used by the Javascript that generate the download link (and other file action URLs).

After trying to use a richer object in the JSON returned to the FileManager Read action, I have come to the conclusiong (confirmed by support), that doing so will break the compnent (rename will not trigger any action on the server, update will cause a JS error inside the kendo libraries).

My suggestion would be to add some additional field to the data model to hold domain-specific information. That field should be handeled in a transparent manner by the Kendo component and it should be made available to any Javascript method. Ideally, I would have loved to be able to add a full set of properties to the client-side object but a single additional string property would actually be enough for everything I need to do.

Unplanned
Last Updated: 20 Oct 2020 08:59 by ADMIN
Created by: Alberto Zanetti
Comments: 1
Category: Gantt
Type: Feature Request
2
That is a missing feature which is contained in Jquery gantt.
Unplanned
Last Updated: 15 Oct 2020 14:02 by ADMIN
Created by: Dina
Comments: 2
Category: Grid
Type: Feature Request
1

 

I want to be able to expand / collapse grouped column headers in my grid (ASP.NET Core). I have found this example which achieves what I need (https://docs.telerik.com/kendo-ui/knowledge-base/grid-expand-collapse-columns-group-button-click), however the HeaderTemplate() method appears to be unavailable. See my placement below. 

I am using the following packages:

KendoUIProfessional, Version="2020.3.915"
Telerik.UI.for.AspNet.Core, Version="2020.3.915"

 

 
 @(Html.Kendo().Grid<RegulationViewModel>
    ()
    .Name("grid")
    .Columns(columns =>
    {
 
    columns.Select().Width(75).Locked(true);
        columns.Group(g => g
            .Title("Key information")
            .HeaderTemplate("Key info <button class='k-button' style='float: right;' onclick='onExpColClick(this)'><span class='k-icon k-i-minus'></span></button>")
            .Columns(i =>
            {
                i.ForeignKey(p => p.ContinentId, (System.Collections.IEnumerable) ViewData["continents"], "Id", "ContinentName")
                    .Width(110).Locked(true);
                i.ForeignKey(p => p.AreaId, (System.Collections.IEnumerable) ViewData["areas"], "Id", "AreaName")
                    .Width(150).Title("Area").Locked(true);
            })
            );
        columns.ForeignKey(p => p.CountryStateProvinceId, (System.Collections.IEnumerable)ViewData["countries"], "Id", "CountryStateProvinceName")
            .Width(150).Locked(true);
        columns.Command(command => command.Destroy()).Width(100);
    })
        .ToolBar(toolbar =>
        {
        toolbar.Create();
        toolbar.Save();
        toolbar.Custom().Text("Mark reviewed").Name("review");
    })
    .Editable(editable => editable.Mode(GridEditMode.InCell))
        .PersistSelection()
        .Navigatable()
        .Resizable(r => r.Columns(true))
        .Reorderable(r => r.Columns(true))
        .Sortable()
        .Filterable(f => f
            .Extra(false)
            .Messages(m => m.Info("Show items with:"))
            .Operators(operators => operators
                .ForString(str => str
                    .Clear()
                    .Contains("Contains"))
        )
        )
        .Scrollable(sc => sc.Virtual(true))
        .Events(e => e
            .Edit("forceDropDown")
            .DataBound("onDataBound")
            .FilterMenuInit("filterMenuInit")
    )
    .DataSource(dataSource => dataSource
        .Ajax()
        .Batch(true)
        .PageSize(20)
        .ServerOperation(false)
        .Model(model =>
        {
        model.Id(p => p.Id);
        model.Field(p => p.Id).Editable(false);
        model.Field(p => p.ContinentId).DefaultValue((ViewData["defaultContinent"] as ContinentViewModel).Id);
        model.Field(p => p.AreaId).DefaultValue((ViewData["defaultArea"] as AreaViewModel).Id);
        model.Field(p => p.CountryStateProvinceId).DefaultValue((ViewData["defaultCountry"] as CountryStateProvinceViewModel).Id);
    })
        .Read(read => read.Action("GetRegulations", "RegulationIndex").Type(HttpVerbs.Get))
        .Create(create => create.Action("AddRegulations", "RegulationIndex").Type(HttpVerbs.Post))
        .Update(update => update.Action("UpdateRegulations", "RegulationIndex").Type(HttpVerbs.Post))
        .Destroy(delete => delete.Action("DeleteRegulations", "RegulationIndex").Type(HttpVerbs.Delete))
    ))
Completed
Last Updated: 15 Oct 2020 07:57 by ADMIN
Release 2020.R3.SP.next
Created by: Jorge
Comments: 0
Category: ImageEditor
Type: Bug Report
0

Bug report

The Kendo UI ImageEditor's SaveAs.ProxyURL does not accept a string using Razor Syntax.

Current behavior

image

Expected/desired behavior

Like the jQuery configuration, the ProxyURL should accept string URLs.

Workaround

Utilizing the Kendo UI ImageEditor's setOptions method, configure the proxyURL with jQuery:

   $(function () {
        var imageEditor = $("#imageEditor").data("kendoImageEditor");

        imageEditor.setOptions({
            saveAs: {
                fileName: "ImageEditorFile.png",
                forceProxy: true,
                proxyURL: "Home/SaveProxyURL",
            }
        });
    });

Environment

  • Kendo UI version: 2020.3.915
  • Browser: All
Planned
Last Updated: 14 Oct 2020 05:55 by ADMIN

Bug report

When the user creates a folder and tries to add a file to the Editor an error occurs that the file is not found. This behavior is observed only if the application is Core 3.1.

Reproduction of the problem

  1. Open Image and File Browser Demo
  2. In the ImageBrowser create a folder.
  3. Upload an image and try to add it to the Editor

Current behavior

Currently, in the console, an error 404 occurs that the resource is not found.

Expected/desired behavior

The image should be added to the Editor without errors.

Environment

  • Kendo UI version: 2010.2.617
  • Browser: [all ]
Completed
Last Updated: 13 Oct 2020 18:48 by ADMIN
Release 2020.R3.SP.next
Created by: Bryan Patrick
Comments: 5
Category: Filter
Type: Bug Report
2

Bug report

Filter component operators are always rendered in the initial order, regardless of the specified order

Reproduction of the problem

This code:

.Fields(f =>
      {
          f.Add(p=>p.FirstName).Operators(o =>
                o.String(n =>n
                    .Contains("Contains")
                    .Eq("Is equal to")
                    .Custom("john", c => c.Text("John").Handler("oddNumbersHandler"))
                    )
                );

Renders to this:

Expected/desired behavior
The order of the operators shall be in the predefined order.

Environment
Kendo UI version: [all]
Browser: [all]

Completed
Last Updated: 13 Oct 2020 17:48 by ADMIN
Release 2020.R3.SP.next

Bug Report:

Whenever the foreign key column of the grid is configured for multi checkbox filtering and is nullable, the value of the "null" option is sent to the server as "NaN".

Steps to replicate:

1. Set ForeignKey column

2. Make the column nullable

3. Set the filterable.multi option to true

4. filter by the null value

A sample project with reproduction has been shared in Ticket with ID: 1463089

 

 

Unplanned
Last Updated: 13 Oct 2020 08:54 by ADMIN

Bug Report

Ticket ID:1486632

When using groupable.sort.compare with client operations and groupPaging, a JavaScript error is thrown:

Reproduction

Dojo

Environment

2020.3.915

Completed
Last Updated: 09 Oct 2020 10:56 by ADMIN
Release 2020.R3.SP.next
Such mechanism is available for the Kendo HTML helper methods (ToClientTemplate). But similar mechanism is missing from the Tag Helpers. 
1 2 3 4 5 6