4

単一のデータベース呼び出しでドロップダウン リストを作成しようとしています。

私のテーブルは Id 列と CompanyName 列で構成されています。CompanyName をユーザーに表示する必要があり、いずれかが選択されたら、ページの Id を Id に設定します。

情報を保存するために、単純なモデルをまとめました。

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;

namespace Portal.Models
{
    public class CompanyListId
    {
        public int Id { get; set; }
        public string CompanyName { get; set; }
    }

    public class CompanyListIdDBContext : DbContext
    {
        public DbSet<CompanyListId> Contacts { get; set; }
    }
}

しかし、ビュー内のコントローラーとカミソリ呼び出しに問題があります。

私のコントローラー:

public void CompanyListIdSearch()
        {
            using (var dc = new CompanyListIdDBContext())
            {
                var content = from p in db.Companies
                                select new { p.CoId, p.CompanyName };
            }
        }

ビューでのカミソリ呼び出し:

<div id="partners" class="linen">

                        @{Html.DropDownList("CompanyListIdSearch", new SelectList(Model.CompanyName));}
                    </div>

ビューの上部でモデルをつかむ@model Portal.Models.CompanyListId

したがって、大まかに言えば、私がやろうとしているのは、かみそりタグでコントローラーを呼び出すビューを作成することです。コントローラーはモデルをデータで更新し、そのデータがドロップダウンに表示されます。私はこれに間違った方法でアプローチしていますか?

このエラーが発生しています:

The model item passed into the dictionary is of type 'Portal.Models.DashboardContents', but this dictionary requires a model item of type 'Portal.Models.CompanyListId'. 
4

1 に答える 1

3

そうではありません。そのようにメソッドを呼び出すことはできませんDropDownList

まず、そのアイテムのコレクションをあなたのに入れますViewBag

using (var dc = new CompanyListIdDBContext())
{
    var content = from p in db.Companies
       select new { p.CoId, p.CompanyName };

    ViewBag.CompaniesList = content
        .Select(c => new SelectListItem
        {
            Text = c.CompanyName,
            Value = c.CoId.ToString()
        }).ToList();
}

ビューを返す前に、必ずアクションの結果でその関数を呼び出してください。

最後に、モデル プロパティを使用して次のように切り替えますDropDownListFor

@Html.DropDownListFor(m => m.Id, ViewBag.CompaniesList);

ただし、より良いアプローチはViewBag、を使用せず、代わりにビュー モデルを使用することです。このようなもの:

public class CompanyViewModel
{
    public int Id { get; set; }
    public string CompanyName { get; set; }
    public List<SelectListItem> CompaniesList { get; set; }
}

次に、アクション メソッドは次のようになります。

public ActionResult YourAction()
{
    var model = new CompanyViewModel();

    using (var dc = new CompanyListIdDBContext())
    {
        var content = from p in db.Companies
            select new { p.CoId, p.CompanyName };

        model.CompaniesList = content
            .Select(c => new SelectListItem
            {
                Text = c.CompanyName,
                Value = c.CoId.ToString()
            }).ToList();
    }

    return View(model);
}

次に、ビューは新しいモデルを使用します。

@model CompanyViewModel

次に、ドロップダウンは次のようになります。

@Html.DropDownListFor(m => m.Id, Model.CompaniesList)
于 2013-10-02T15:39:27.143 に答える