我正在使用带有Razor语法的Asp.Net和最新的Telerik组件。不幸的是,当我点击下拉框时,我看不到任何内容,但VS调试器向我显示我执行了_AjaxLoaiding方法。如何解决这个谜团(即将数据加载到DropDownList中)?
这是我的控制器的一部分:
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") } };
}
这是我的观点的一部分:
@{Html.Telerik().DropDownList()
.Name("documentType").Enable(false)
.HtmlAttributes(new { style = "width:250px;" })
.DataBinding(binding => binding.Ajax().Select("_AjaxLoading", "Applicants"))
.Render();
}
答案 0 :(得分:4)
嗯,你做了一件奇怪的事情:你将Dictionary<string, string>
传递给你的选择列表,并断言valueField是“ProductId”,而TextField是“ProductName”。
你的词典没有这样的属性......强烈的打字很好。
所以你需要一个产品(或其他)类
public class Product {
public int ProductId {get;set;}
public string ProductName {get;set;}
}
并使用它,即使是出于测试目的
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") } };
}
编辑:
顺便说一下,如果你想在SelectList中选择“Abc”和“123”,这不是正确的方法,请看你在上一篇文章中的@Gaby的回答https://stackoverflow.com/a/10500876/961526
编辑2:
让我们再试一次
这么多,我的一些常用的扩展类(我限制它们,它们曾经更通用,但是......无论如何)
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});
然后
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 } };
}