【问题标题】:How to use webgrid ASP.net MVC 3.0?如何使用 webgrid ASP.net MVC 3.0?
【发布时间】:2012-09-30 16:24:30
【问题描述】:

我是 ASP.net MVC 3.0 的新手,我想将我的数据显示到 WebGrid 并在视图中编写此代码。

@model IEnumerable<MvcApplication3.Models.MOVIE>


@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
    @ViewBag.abc;
</p>

@Html.ActionLink("Asc Title", "Index", new { sortOrder = "asc" })
@Html.ActionLink("Desc Title", "Index", new { sortOrder = "desc" })

<table>
    <tr>
        <th>
            TITLE
        </th>
        <th>
            PRICE
        </th>
        <th>
            RELEASEDATE
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>            
            @Html.DisplayFor(modelItem => item.TITLE)
        </td>
        <td align="right">
            @Html.DisplayFor(modelItem => item.PRICE)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.RELEASEDATE)
        </td>
        <td>
            @Html.ActionLink("Edit Saya", "Edit", new { id=item.ID }) |
            @Html.ActionLink("Details", "Details", new { id=item.ID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.ID }) |          
            @Html.ActionLink("Select", "MoviedanArtis", new { id = item.ID }) 
        </td>
    </tr>
}

</table>

@{    
    var grid = new WebGrid(Model.ToList(), rowsPerPage: 6);    
}

<div id="grid">
    @grid.GetHtml(tableStyle: "grid", 
    headerStyle: "head",
    alternatingRowStyle: "alt",
    columns: grid.Columns(grid.Column("TITLE"), grid.Column("PRICE"), grid.Column("RELEASEDATE")))
</div>

这里是控制器

private MovieEntities db = new MovieEntities();

        //
        // GET: /Coba/        
        public ViewResult Index()
        {           
            return View(db.MOVIEs.ToList());
        }

之后我总是得到错误“查询的结果不能被枚举多次。”我能做些什么来解决它?

【问题讨论】:

    标签: asp.net-mvc entity-framework webgrid


    【解决方案1】:

    你传递的模型应该是一个集合它实现了'IEnumerable'。例如,如果您使用List 作为集合,请尝试使用IList。

    @using MyResource = Resources.ComWebResources
    @model IList<App.WorksInformation> 
    <div id="worksajaxgrid">
    
    @{
      var grid = new WebGrid(Model, rowsPerPage: 6,
     ajaxUpdateContainerId:"worksajaxgrid",
     ajaxUpdateCallback:"ajaxUpdate_Callback");
    
       @grid.GetHtml(tableStyle: "webGrid",headerStyle: "header", alternatingRowStyle:     "alt", selectedRowStyle: "webgrid-selectedrow",
       columns: grid.Columns(
    
      grid.Column("SlNo", @MyResource.grid_SlNo, canSort: false, style: "webcolwidthSlNo"),
      grid.Column("WorkOrderId", @MyResource.grid_SCTWorkOrderId, canSort: false),
      grid.Column("Project", @MyResource.lbl_Project, canSort: false),
      grid.Column("WorkOrderNo", @MyResource.grid_WorkOrderNo, canSort: false),
      grid.Column("WorkCode", @MyResource.grid_WorkCode, canSort: false),
      grid.Column("WorkName", @MyResource.grid_WorkName, canSort: false)
     ));
     }
    </div>
    

    在 webresources 中,您可以放置​​任何您想直接显示的标签,而不是使用资源。 例如"serial No" 而不是@MyResource.grid_SlNo

    根据您的评论添加修改。

    public class MOVIE
    {
       public string TITLE{get;set;}
       public string NAME{get;set;}
    
    
    }
    
    IList<MOVIE>MOVIEList= new List<MOVIE>{new MOVIE{"Pirates of the Caribbian","PC"}, new MOVIE{"Lord of the Rings","LR"} ..}
    

    通过这样的模型

    【讨论】:

    • 我已将@model IEnumerable 声明为 IEnumerable 但错误仍然发生
    • Models.MOVIE是一个什么样的合集?
    • MOVIE 只是我的表格的一个模型,由 TITLE、NAME 和 RELEASEDATE 组成。所以我像 ASP.net MVC 教程一样使用了 IEnumerable
    • 试试 IList 作为你的模型
    • 我仍然有错误。我的控制器对视图使用“db.MOVIEs.ToList()”。如果将@model IENumerable 更改为@model IList,则会出现此错误:传递到字典中的模型项的类型为'System.Data.Objects.ObjectResult1[MvcApplication3.Models.MOVIE]', but this dictionary requires a model item of type 'System.Collections.Generic.IList1[MvcApplication3.Models.MOVIE]'。
    猜你喜欢
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2012-09-03
    • 2013-01-07
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多