如何在ASP.NET MVC 4中正确使用元组

汤米·考利

我试图在使用元组的一个视图中使用两个模型,但出现此错误:“ /”应用程序中的服务器错误。

传递到字典中的模型项的类型为“ PagedList.PagedList 1[S00117372CA3.Product]', but this dictionary requires a model item of type 'System.Tuple2 [PagedList.IPagedList 1[S00117372CA3.Product],System.Collections.Generic.IEnumerable1 [S00117372CA3.Order]]”。

说明:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中起源的更多信息。

异常详细信息:System.InvalidOperationException:传递到字典中的模型项的类型为“ PagedList.PagedList 1[S00117372CA3.Product]', but this dictionary requires a model item of type 'System.Tuple2 [PagedList.IPagedList 1[S00117372CA3.Product],System.Collections.Generic.IEnumerable1 [S00117372CA3.Order]]”。

这是我的代码:

    @*@model PagedList.IPagedList<S00117372CA3.Product>*@
@model Tuple<PagedList.IPagedList<S00117372CA3.Product>, IEnumerable<S00117372CA3.Order>>
@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Item1[0].ProductName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Item1[0].Supplier.CompanyName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Item1[0].Category.CategoryName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Item1[0].QuantityPerUnit)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Item1[0].UnitPrice)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Item1[0].UnitsInStock)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Item1[0].UnitsOnOrder)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Item1[0].ReorderLevel)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Item1[0].Discontinued)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model.Item1) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.ProductName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Supplier.CompanyName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Category.CategoryName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.QuantityPerUnit)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.UnitPrice)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.UnitsInStock)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.UnitsOnOrder)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ReorderLevel)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Discontinued)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.ProductID }) |
            @Html.ActionLink("Details", "Details", new { id=item.ProductID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.ProductID })
        </td>
    </tr>
}

</table>

<div>
    Page @(Model.Item1.PageCount < Model.Item1.PageNumber ? 0 : Model.Item1.PageNumber) of @Model.Item1.PageCount
    @if (Model.Item1.HasPreviousPage)
    {
        @Html.ActionLink("<<", "Index", new { page = 1})
        @Html.Raw(" ");
        @Html.ActionLink("< Prev", "Index", new {page = Model.Item1.PageNumber - 1})
    }
    else{
     @:<<
     @Html.Raw(" ");
        @:< Prev   
    }

    @if (Model.Item1.HasNextPage)
    {
        @Html.ActionLink("Next >", "Index", new {page = Model.Item1.PageNumber + 1})
        @Html.Raw(" "); 
        @Html.ActionLink(">>", "Index", new {page = Model.Item1.PageCount})
    }
    else{
     @:Next >
     @Html.Raw(" ")
@:>>   
    }
</div>

@foreach (var item in Model.Item2)
{
    @Html.Partial("_Orders")
}

这是我要求的控制器代码:

var q = (from o in db.Order_Details
                     where o.ProductID == id
                     join ord in db.Orders
                     on o.OrderID equals ord.OrderID
                     orderby o.Quantity descending
                     select ord);
            var qm = q.Take(3);
            return PartialView("_Orders", qm.ToList());
约翰·H

本质上,您只是试图将多个模型传递给视图。由于您只能将一种类型传递给视图,因此执行所需操作的方法是将模型包装在视图模型中,然后将其传递给视图。就像是:

public class ProductViewModel
{
    public IPagedList<Product> Products { get; set; }
    public IEnumerable<Order> Orders { get; set; }
}

public ActionResult Index()
{
    var model = new ProductViewModel();
    model.Products = // ... fetch from database
    model.Orders = // ... fetch from database

    return View(model);
}

现在可以将视图强类型化为视图模型:

@model ProductViewModel

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在ASP.NET MVC 4中正确使用元组

来自分类Dev

如何在ASP.NET MVC 4区域中正确使用Html.ActionLink

来自分类Dev

如何在ASP.NET MVC 4区域中正确使用Html.ActionLink

来自分类Dev

如何在ASP.NET MVC多层应用程序中正确进行单元测试?

来自分类Dev

如何在ASP.NET MVC多层应用程序中正确进行单元测试?

来自分类Dev

如何在ASP.NET MVC中重置会话超时

来自分类Dev

我如何在ASP.NET MVC中隐藏div

来自分类Dev

如何在ASP.NET MVC中运行作业?

来自分类Dev

如何在ASP.NET MVC中配置HTML压缩

来自分类Dev

如何在ASP.NET MVC中组织DAL

来自分类Dev

如何在ASP.NET MVC中读取PPT文件?

来自分类Dev

如何在ASP Net MVC 3中运行迁移

来自分类Dev

如何在ASP.NET MVC中获取视图路径

来自分类Dev

如何在Asp.net MVC中实现插件/插件?

来自分类Dev

如何在ASP.NET MVC中创建Webhook?

来自分类Dev

如何在ASP.NET MVC Razor中编码“ /”

来自分类Dev

如何在ASP NET MVC 6中更新模型?

来自分类Dev

DATEDIFF如何在Asp.net MVC中编写

来自分类Dev

如何在asp.net mvc中更新图像?

来自分类Dev

如何在asp.net MVC中创建Ajax链接?

来自分类Dev

如何在ASP.NET MVC中屏蔽出站URL?

来自分类Dev

如何在ASP.NET MVC中运行作业?

来自分类Dev

如何在ASP.NET MVC中读取PPT文件?

来自分类Dev

如何在ASP.NET 5 MVC中访问缓存?

来自分类Dev

如何在Asp .net MVC中验证下拉列表

来自分类Dev

如何在ASP.Net MVC中调用Bootstrap模式?

来自分类Dev

如何在ASP.NET MVC中配置AutoMapper属性

来自分类Dev

asp.net MVC如何在集合中显示值

来自分类Dev

如何在asp.net mvc 中设置Iframe src?