1

私のコントローラーには次のものがあります:

        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")%>

しかし、私はエラーがあります:

キー 'categories' を持つ ViewData アイテムのタイプは 'System.Collections.Generic.List`1[[Category, MvcApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' ですが、タイプである必要があります「IEnumerable」。

これを解決するにはどうすればいいですか?

4

5 に答える 5

3

あなたは多分試すことができます

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

(カテゴリに名前とIDフィールドがあると仮定)

次に、選択した値を保持するロジックを追加できます。

編集:私が間違っていなければ、あなたのエラーメッセージは完全ではありません:それはIEnumerable<SelectListItem>

于 2012-04-08T17:25:49.693 に答える
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>

これがお役に立てば幸いです。ありがとう。

于 2012-04-08T22:19:42.807 に答える
0

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

以下に示すコードは ASP.NET MVC3 用ですが、状況に簡単に関連付けることができます。私の回答に反対票を投じないでください :)

カテゴリに含める必要がある (選択リストに表示される) 新しい製品を作成していると仮定すると、Create view/page and action メソッドが必要になります。次のビューモデルを作成します。

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 class Category
{
     public int Id { get; set; }
     public string Name { get; set; }
}

Create ビューには、次のように表示されます。

@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 -->
}

Create アクション メソッド:

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

     return View(viewModel);
}

これが役立つことを願っています。

于 2012-04-08T18:24:45.437 に答える
0

私はこれが古いことを知っていますが、誰かが答えを探している場合に備えて

カテゴリに Id と Name があり、現在の CategoryId がモデルにあるとします。

@Html.DropDownListFor(m => m.CategoryId, new SelectList((IEnumerable)ViewData["categories"], "Id", "Name"))
于 2016-03-08T02:34:07.210 に答える