2012-04-08 10 views
1

のDropDownListとViewDataを

 Category x = new Category(1, "one", 0); 
     Category y = new Category(2, "two", 1); 
     Category z = new Category(3, "three", 1); 
     List<Category> categories = new List<Category>(); 
     categories.Add(x); 
     categories.Add(y); 
     categories.Add(z); 
     ViewData["categories"] = categories; 

そして、私の見解では、私が持っている:

<%= Html.DropDownList("categories")%> 

をしかし、私はエラーがあります:キー「カテゴリ」を持っているのViewData項目があります'[Category、MvcApplication1、Version = 1.0.0.0、Culture =ニュートラル、PublicKeyToken = null]' '型の' System.Collections.Generic.List 'タイプですが、' IEnumerable 'タイプである必要があります。

Uggggghhh解決方法

+0

私のチュートリアルはこれを説明するモデルのhttpであると仮定すると答え

を探しています知っています://www.asp.net/mvc/tutorials/javascript/working-with-the-dropdownlist-box-and-jquery/using-the-dropdownlist-helper-with-aspnet-mvc http://blogs.msdn .com/b/rickandy/archive/2012/01/09/cascasding-dropdownlist-in-asp-net-mvc.aspx – RickAndMSFT

答えて

3

あなたは多分、あなたが選択した値をkeedするロジックを追加することができます

(仮定カテゴリーは名前を持っているとし、IDフィールドが)

ViewData["categories"] = new SelectList(categories, "Id", "Name"); 

を試すことができます。

EDIT:あなたのエラーメッセージは、私が間違っていないよ場合は、完全ではありません原因:あなたはViewDataアイテムを作成する前に、それは、あなたが変換することができますラインでIEnumerable<SelectListItem>

0

を求めていますList<T>IEnumerable<T>

IEnumerable<Category> cat = categories; 
ViewData["categories"] = cat; 
+0

同じエラーが発生します。 –

0

これを行うより良い方法は、各ビュー/ページのビューモデルを作成し、必要に応じてデータを入力し、ビュー/ページに戻すことです。ドメインモデルをビュー/ページに戻さないでください。

以下にコードがASP.NET MVC3のためですが、それはあなたの状況に関係するのは簡単です、ダウン私の答えを投票しないでください:)

あなたがする必要がある新製品を作成していると仮定しましょう(選択リストに表示される)カテゴリー内にあるので、作成ビュー/ページおよびアクションメソッドが必要になります。

@model MyProject.ViewModels.ProductCreateViewModel 

@using (Html.BeginForm()) 
{ 
    <table> 
      <tr> 
       <td><b>Category:</b></td> 
       <td> 
        @Html.DropDownListFor(x => x.CategoryId, 
         new SelectList(Model.Categories, "Id", "Name", Model.CategoryId), 
         "-- Select --" 
        ) 
        @Html.ValidationMessageFor(x => x.CategoryId) 
       </td> 
      </tr> 
    </table> 

    <!-- Add other HTML controls if required and your submit button --> 
} 

あなたの作成したアクションメソッド:

次を持つことになり、あなたの作成ビューで

public class Category 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

public class ProductCreateViewModel 
{ 
    // Include other properties if needed, these are just for demo purposes 

    public string Name { get; set; } 
    public string SKU { get; set; } 
    public string LongDescription { get; set; } 

    // This is the unique identifier of your category, 
    // i.e. foreign key in your product table 
    public int CategoryId { get; set; } 
    // This is a list of all your categories populated from your category table 
    public IEnumerable<Category> Categories { get; set; } 
} 

カテゴリークラス:私は、次のビューモデルを作成します

public ActionResult Create() 
{ 
    ProductCreateViewModel viewModel = new ProductCreateViewModel 
    { 
      // Here you do a database call to populate your dropdown 
      Categories = categoryService.GetAllCategories() 
    }; 

    return View(viewModel); 
} 

私はホこれは役に立ちます。

0

Jquery Ajax + JSONを使用すると、ドロップダウンリストが表示されます。これにより、応答性の良いWebページが作成されます。

これは簡単です。あなたがしなければならないのは、returntype JSONResultの新しいアクションを追加し、そこにドロップダウンローディングコードを移動することだけです。 コントローラクラスで

新しいアクションを作成:ビューページでは

public JsonResult FillDropDown() 
     { 
      Category x = new Category(1, "one", 0); 
      Category y = new Category(2, "two", 1); 
      Category z = new Category(3, "three", 1); 
      List<Category> categories = new List<Category>(); 
      categories.Add(x); 
      categories.Add(y); 
      categories.Add(z); 

      return Json(categories,JsonRequestBehavior.AllowGet); 
     } 

を:サーバーからの負荷データのためのjQueryのコードを追加します。

<script type="text/javascript"> 
    $(document).ready(function() 
    { 
     var _selbxTest = $('#selbxTest'); //Get dropdownlistbox 
     $.getJSON(
      '@Url.Action("FillDropDown","Home")', //Provide JsonResultActionName, ControllerName 
      {}, 
       function (_recdData) { 
        //Update dropdownListBox here 
        _selbxTest.append($('<option></option>').val(0).html('Select')); 
        $.each(_recdData, function (key, value) { 
         _selbxTest.append($('<option></option>').val(value.value).html(value.text)); 
        }); 
       }); 
    }); 
</script> 

最後に代わりHtml.DropDownListのあなたのビューページでは、単純な選択ボックスを(追加)

<div> 
     <select id="selbxTest"></select> 
</div> 

が、これはあなたを助けることを願っています。ありがとう。

0

私は、これは古いですが、場合には、誰かがカテゴリ持っているとID、および名前と現在の区分が

@Html.DropDownListFor(m => m.CategoryId, new SelectList((IEnumerable)ViewData["categories"], "Id", "Name")) 
関連する問題