4

私はRazor構文と最新のTelerikコンポーネントでAsp.Netを使用しています。残念ながら、ドロップダウンボックスをクリックすると何も表示されませんが、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();
                                        }
4

1 に答える 1

4

うーん、奇妙なことをしていDictionary<string, string>ます。選択リストにaを渡し、valueFieldが「ProductId」であり、TextFieldが「ProductName」であると主張します。

あなたの辞書にはそのような特性はありません...強くタイプするのは良いことです。

したがって、クラスProduct(またはその他)が必要になります

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」が必要な場合、これは正しい方法ではありません。以前の投稿https://stackoverflow.com/a/10500876/961526の@Gabyの回答をご覧ください。

編集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 } };
}
于 2012-05-08T16:00:25.183 に答える