kendo ejemplos dropdownlist c# asp.net telerik telerik-mvc

c# - ejemplos - kendo dropdownlist selected value



¿Por qué DropDownList de Telerik no tiene ningún valor cuando se usa el enlace de datos ajax? (1)

Estoy usando Asp.Net con la sintaxis de Razor y los últimos componentes de Telerik. Lamentablemente, cuando hago clic en el cuadro desplegable no veo nada en él, pero el depurador VS me muestra que ejecuté el método _AjaxLoaiding. ¿Cómo puedo resolver este misterio (es decir, cargar datos en DropDownList)?

Esto es parte de mi controlador:

public ActionResult _AjaxLoading(string text) { var product = new Dictionary<string, string>(); product.Add("a","b"); return new JsonResult { Data = new { Text = "Abc", Value = "123", Produtcs = new SelectList(product, "ProductID", "ProductName") } }; }

Esto es parte de mi Vista:

@{Html.Telerik().DropDownList() .Name("documentType").Enable(false) .HtmlAttributes(new { style = "width:250px;" }) .DataBinding(binding => binding.Ajax().Select("_AjaxLoading", "Applicants")) .Render(); }


Hmm, estás haciendo algo extraño: pasas un Dictionary<string, string> a tu lista de selección, y afirmas que el valueField es "ProductId", y TextField es "ProductName".

Su diccionario no tiene tales propiedades ... Escribir fuertemente es bueno.

Entonces necesitarías un producto de clase (o lo que sea)

public class Product { public int ProductId {get;set;} public string ProductName {get;set;} }

y usarlo, incluso para fines de prueba

public ActionResult _AjaxLoading(string text) { var products= new List<Product> { new Product{ProductId = 1, ProductName="b"} }; return new JsonResult { Data = new { Text = "Abc", Value = "123", Products= new SelectList(products, "ProductID", "ProductName") } }; }

EDITAR:

Por cierto, si quieres "Abc" y "123" en SelectList, esta no es la manera correcta de hacerlo, mira la respuesta de @Gaby en tu publicación anterior https://.com/a/10500876/961526

EDICION 2:

intentemoslo de nuevo

así que primero, algunas de mis clases de extensión habituales (las limité, solían ser más genéricas, pero ... de todos modos)

public static class ComboExtensions { public static IEnumerable<SelectListItem> ToSelectListItem<T>(this IEnumerable<T> enumerable, Func<T, string> text, Func<T, int> value) { return enumerable.Select(item => new SelectListItem { Text = text(item).ToString(), Value = value(item).ToString(), }).AsEnumerable(); } public static IEnumerable<SelectListItem> WithDefaultValue(this IEnumerable<SelectListItem> selectListItems, int defaultValue = 0, string chooseText = "choose") { IList<SelectListItem> items = selectListItems.ToList(); items.Insert(0, new SelectListItem {Value = defaultValue.ToString(), Text = chooseText});

entonces

public ActionResult _AjaxLoading(string text) { var products = new List<Product> { new Product {ProductId = 1, ProductName = "b"} }.ToSelectListItem(m => m.ProductName, m => m.ProductId) .WithDefaultValue(1, "abc"); return new JsonResult { Data = products } }; }