MVC返回视图的项目列表

时间:2014-04-29 15:45:38

标签: c# asp.net-mvc

有人可以帮帮我吗。我正在尝试从数据库中检索存储详细信息列表,只需在视图中显示列表。

存储模型:

 public class StorageModel
{
    [Required]
    [Display(Name = "Storage Name")]
    public string Name { get; set; }

    [Required]
    [Display(Name = "Date From")]
    public string DateFrom { get; set; }

    [Required]
    [Display(Name = "Date To")]
    public string DateTo { get; set; }

    [Required]
    [Display(Name = "Size")]
    public string Size { get; set; }
}

控制器方法:

 public ActionResult ViewStorage()
    {
        List<CommonLayer.TblNewsStorage> storageList = new BusinessLayer.Storage().getAllStorage().ToList();
        return View(storageList);
    }

从上面的BusinessLayer中检索数据:

public IQueryable<CommonLayer.TblNewsStorage> getAllStorage()
    {
        return this.Entities.TblNewsStorage;
    }

现在我使用视图脚手架模板使用StorageModel创建了一个强类型视图,但它无法正常工作。我究竟做错了什么?我尝试传递var而不是List,但它仍无效。我是MVC的新手所以我一定做错了。传递和显示数据列表到视图的正确方法是什么?

查看MVC生成的代码:

    @model IEnumerable<NewsLibrary.Models.StorageModel>

@{
    ViewBag.Title = "ViewStorage";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>ViewStorage</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Name)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.DateFrom)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.DateTo)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Size)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.DateFrom)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.DateTo)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Size)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
        </td>
    </tr>
}

</table>

我收到以下错误:

  

传递到字典中的模型项的类型是&#39; System.Collections.Generic.List 1[CommonLayer.TblNewsStorage]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [NewsLibrary.Models.StorageModel]&#39;。

3 个答案:

答案 0 :(得分:2)

如果您仔细查看模型,View会希望您看到它是NewsLibrary.Models.StorageModel的 IEnumerable 。您正在传递CommonLayer.TblNewsStorage类型的列表/ IEnumerable。确保这两个数据类型相同。

答案 1 :(得分:1)

@model IEnumerable<NewsLibrary.Models.StorageModel>

必须传入相同的数据类型。

你正在传递

List<CommonLayer.TblNewsStorage>

答案 2 :(得分:-1)

@foreach(模型中的var项目){                           项目名称               }

试试这样。你需要删除@ html.displayfor(model =&gt; item.name)到你标签中的item.name