0

詳細表示ページに次のエラーが表示されます。

The model item passed into the dictionary is of type 'System.Data.Entity.DynamicProxies.cpd_certificates_65AF30842281867E2F4F6A1026590271109C12A85C8175394F14EF6DE429CBC7', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[cpd.Models.cpd_certificates]'. 

これは私のコントローラーです:

 public class Default8Controller : Controller
{
    //
    // GET: /Default8/
    private cpdDbContext db = new cpdDbContext();

    public ActionResult Index()
    {


        return View(db.CPD.ToList());
    }

    //
    // GET: /Default8/Details/5

    public ActionResult Details(int id)
    {

        cpd_certificates cpd_ = db.Cert.Find(id);

        return View(cpd_);
    }

以下は私の詳細ビューです:

@model IEnumerable<cpd.Models.cpd_certificates>

@{
    ViewBag.Title = "Details";
}

<h2>Details</h2>
 <table>
        <tr>
            <th>
                certificateNo
        </th>
        <th>
            Mark
        </th>
          <th></th>
    </tr>
       @foreach (var item in Model) {
            <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CertificateNo)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Mark)
        </td>

    </tr>
}

</table>

以下は cpd_certificates モデルです。

public class cpd_certificates
{

        [Key]
        public int CertificateNo { get; set; }
        public int QuizNo { get; set; }


        public DateTime? DateReceived { get; set; }
        public DateTime? DatePaid { get; set; }
        public string Mark { get; set; }
        public int? AccreditationNo { get; set; }


        public int? ID { get; set; }
        public virtual cpd_recipients Recipients { get; set; }

}

2 つのモデルがあり、インデックスでリストを表示できます。詳細リンクをクリックすると、取得した証明書と別のモデル/テーブルにある試験の詳細に移動することを意図していました。要するに、CPD の PK ID と Cert の FK ID を持つ 2 つのモデルです。インデックス ページには個人情報のみが表示され、このページは問題ありません。[詳細] をクリックすると、その人物の多くの証明書である他のモデル/テーブル データが表示されます。

4

1 に答える 1

0

モデルを単一のエントリとして渡すのではなく、IEnumerable エントリのリストとしてビューに渡す必要があります。コントローラでは 1 つのエントリの詳細を表示したいのですが、ビューではすべてのエントリの詳細を表示したいと考えています。まず、何を表示するかを決定する必要があります。1 つのエントリの詳細を表示するには、次を使用します。

コントローラ:

public ActionResult Details(int id)
{
    cpd_certificates cpd_ = db.Cert.Find(id);
    return View(cpd_);
}

見る:

@model cpd.Models.cpd_certificates  
@{
ViewBag.Title = "Details";}

<h2>Details</h2>
 <table>
    <tr>
        <th>
            certificateNo
        </th>
        <th>
            Mark
        </th>
        <th></th>
    </tr>
    <tr>
        <td>
            @Html.DisplayFor(model => model.CertificateNo)
        </td>
        <td>
            @Html.DisplayFor(model => model.Mark)
        </td>

    </tr>
}

</table>

すべてのエントリを一覧表示する場合は、次のようにします。

コントローラ:

public ActionResult List()
{
    cpd_certificates cpd_ = db.Cert.ToList();
    return View(cpd_);
}

見る:

@model IEnumerable<cpd.Models.cpd_certificates>

@{
    ViewBag.Title = "List";
}

<h2>List</h2>
 <table>
        <tr>
            <th>
                certificateNo
        </th>
        <th>
            Mark
        </th>
          <th></th>
    </tr>
       @foreach (var item in Model) {
        <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CertificateNo)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Mark)
        </td>

    </tr>
}

</table>
于 2012-11-21T13:37:08.293 に答える