Completed
Last Updated: 26 Nov 2019 15:53 by ADMIN

Bug report

The data attributes are not rendered for the DropDownlist when bound to Model in Razor Pages.

Reproduction of the problem

View:

@page
@model TelerikAspNetCoreApp12.Pages.IndexModel

<form>
    @(Html.Kendo().DropDownList()
            .Name("fabric")
            .OptionLabel("Select...")
            .DataTextField("Text")
            .DataValueField("Value")
            .BindTo(Model.Data)
            .Filter("contains")
    )
    <input type="submit" />
</form>

Back end:

namespace TelerikAspNetCoreApp12.Pages
{
    public class IndexModel : Microsoft.AspNetCore.Mvc.RazorPages.PageModel
    {
        public List<TestModel> Data { get; set; } = new List<TestModel>();

        public void OnGet()
        {
            for (int i = 1; i <= 100; i++)
            {
                Data.Add(new TestModel() { Text = "product" + i, Value = i.ToString() });
            }
        }
    }
}

Model:

namespace TelerikAspNetCoreApp12.Models
{
    public class TestModel
    {
        [Required(ErrorMessage = "Please select")]

        public string Text { get; set; }

        public string Value { get; set; }
    }
}

Inspect the input field for the DropDownList. It does not have data-val and data-val-required attributes.

Current behavior

The data attributes are not being rendered.

Expected/desired behavior

The data attributes should be rendered.

Environment

  • Kendo UI version: 2019.2.619
  • jQuery version: x.y
  • Browser: [all]
Approved
Last Updated: 20 May 2019 14:34 by ADMIN
Created by: Graeme
Comments: 1
Category: DropDownList
Type: Feature Request
1

Hi there

I am using MongoDb database and storing much of the data as complex objects.

Like this

Company

string     Name

string     Phone

object[]    Addresses

                   object Id

                   string name

                   string line2

                   string town

So the addresses are not stored in normalised tables such as you would have in a typical sql setup

Also I am using Razor pages and not using view models but binding to page model properties

mostly matching the database document. 

One thing I am wanting to do is make the best of such a plan as it saves a lot of coding time.

If I have a telerik control such as a dropdownlist you would typically return an Id and keep the Id

in the database table.  However in the new style of document database it is common to store

the entire object and not just the Id so the problem is if the control returns only the Id then

the developer has to obtain the rest of the object to store away adding the the complexity of the code.

Telerik allows very easy binding of an object to a control and the whole object remains available to use

such as in a dropdownlist to show a name and return say the Id.

An improvement for those using Document style databases with denormalised data would be the option

to simply return the whole object.

@(Html.Kendo().DropDownList()
                .Name("ToBranch") 
                .DataValueField("Id") 
                .DataTextField("Name") 
                .BindTo((Company.Addreses) 
)

So in addition to DataValueField have something like DataReturnObject(true) or something like that

which would send back all the data for the item which you already have sitting right there.

This would very nicely serialise into the pagemodel complex object property and allow proper model validation

which is a problem when you return an Id but the property expects the full object.

I understand all this can be overcome but just a little tweaking by Telerik would be a significant benefit

where your customers are using document style databases such as MongoDb and Azure Cosmos

 

So..

1 That is my suggestion.

2 Can I currently achieve this somehow?