1

詳細リンクをクリックしたときに目的の出力が得られない理由を誰でも考えることができますか? エラーが発生します:The model item passed into the dictionary is of type 'System.Collections.Generic.List1[AW_Internet.Models.ProdList]', but this dictionary requires a model item of type 'AW_Internet.Models.ProdList'.

コントローラ:

public ActionResult Details(int id1 = 0, int id2 = 0)
{
    string test = "SELECT SalesLT.Product.ProductID, SalesLT.ProductDescription.ProductDescriptionID, SalesLT.Product.Name, SalesLT.Product.ListPrice, LEFT(SalesLT.ProductDescription.Description, 20) as Descrption FROM SalesLT.Product, SalesLT.ProductDescription, SalesLT.ProductModelProductDescription WHERE SalesLT.Product.ProductModelID = SalesLT.ProductModelProductDescription.ProductModelID AND SalesLT.ProductModelProductDescription.ProductDescriptionID = SalesLT.ProductDescription.ProductDescriptionID AND SalesLT.Product.ProductID = " + id1 + " AND SalesLT.ProductDescription.ProductDescriptionID = " + id2;
    var viewModel = db.Database.SqlQuery<ProdList>(test).ToList();
    if (viewModel == null)
    {
        return HttpNotFound();
    }
    return View(viewModel);          
}

ビューモデル:

public class ProdList
    {
        public int ProductID { get; set; }
        public int ProductDescriptionID { get; set; }
        public string Name { get; set; }
        public decimal ListPrice { get; set; }
        public string Description { get; set; }
    }

詳細ビュー:

@model AW_Internet.Models.ProdList

@{
    ViewBag.Title = "Details";
}

<h2>Prod Details</h2>

<div class="displayField">
    @Html.DisplayFor(model => model.ProductID)
</div>
<div class="displayField">
    @Html.DisplayFor(model => model.ProductDescriptionID)
</div>
<div class="displayField">
    @Html.DisplayFor(model => model.Name)
</div>
<div class="displayField">
    @Html.DisplayFor(model => model.ListPrice)
</div>
<div class="displayField">
    @Html.DisplayFor(model => model.Description)
</div>

<p>
    @Html.ActionLink("Back to List", "Index")
</p>

そして、2 つの ID が解析されている私のインデックスからのスニペット:

<td>
    @Html.ActionLink("Details", "Details", new { id1 = item.ProductID, id2 item.ProductDescriptionID })
</td>
4

3 に答える 3

4

クエリから複数のアイテムが返されることが予想される場合はProdList、ビューを次のように更新します。

@model List<AW_Internet.Models.ProdList>

ビュー内のすべてを参照する方法を更新します。単一のレコードを返そうとしている可能性が高いので、次のように記述してください。

ProdList prodList = db.Database.SqlQuery<ProdList>(test).FirstOrDefault();

nullまた、チェックしている場所と同じになることは決してないため、おそらくメソッドも更新する必要があります.ToList()

public ActionResult Details(int id1 = 0, int id2 = 0)
{
    string test = "...";

    var viewModel = db.Database.SqlQuery<ProdList>(test).ToList();

    if (!viewModel.Any())
        return HttpNotFound();

    return View(viewModel);          
}

または、必要なレコードが 1 つだけの可能性が高いシナリオ:

public ActionResult Details(int id1 = 0, int id2 = 0)
{
    string test = "...";

    ProdList prodList = db.Database.SqlQuery<ProdList>(test).FirstOrDefault();

    if (prodList == null)
        return HttpNotFound();

    return View(prodList);          
}

変数名も更新してみてください - :)

于 2013-08-05T15:32:06.287 に答える