如何在mvc contrib grid中绑定没有(编辑,删除,创建)的表

时间:2010-11-16 11:27:17

标签: asp.net-mvc asp.net-mvc-2 mvccontrib

我在mvc 2.0中使用了mvccontrib网格 我想在gridview中绑定一个表...到目前为止,我的编码是....我不是没有正确或错误......

Homecontroller.cs:

public ActionResult List(int? page)
{
    using (ProductDataContext db = new ProductDataContext())
    {
        ViewData["product"] = db.Products.ToList().AsPagination(page ?? 1, 10);
        return View("product");
    }
}

我还创建了列表视图....... 我应该在Index.aspx中编写什么编码

到目前为止,我使用了这种编码,它无法正常工作......

<% Html.Grid((List<Product>)ViewData["product"])
    .Columns(column =>
        {
            column.For(c => c.CategoryID);
            column.For(c => c.SupplierID);

        }).Render(); 
 %>

它显示没有可用的数据。或者还有其他编码吗?

我的问题是我想在mvccontrib网格中绑定表。

1 个答案:

答案 0 :(得分:0)

如果它显示没有可用数据,则问题是db.Products.ToList().AsPagination(page ?? 1, 10)只返回没有元素(空集合)。至于为什么会发生这种情况,你不可能从你提供的信息中说出来。它在很大程度上取决于此ProductDataContext的实现以及数据存储中的可用数据。

话虽如此,我建议您使用强类型视图:

public ActionResult List(int? page)
{
    using (ProductDataContext db = new ProductDataContext())
    {
        var products = db.Products.ToList().AsPagination(page ?? 1, 10);
        return View("product", products);
    }
}

所以你的观点变成了:

<%@ Page
    Language="C#" 
    Inherits="System.Web.Mvc.ViewPage<IEnumerable<AppName.Models.Product>>" %>
<%@ Import Namespace="AppName.Models" %>

<%= Html.Grid<Product>(Model)
        .Columns(column =>
        {
            column.For(c => c.CategoryID);
            column.For(c => c.SupplierID);
        })
%>

请注意视图是如何强烈键入产品集合的。

简单,简单,强烈打字。


更新:

根据评论部分的要求,这是一个向每行添加编辑删除链接的示例:

<%= Html.Grid<Product>(Model)
        .Columns(column =>
        {
            column.For("TableLinks").Named("");
            column.For(c => c.CategoryID);
            column.For(c => c.SupplierID);
        })
%>

TableLinks.ascx部分:

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<AppName.Models.Product>" %>
<%@ Import Namespace="AppName.Models" %>

<td>
    <%: Html.ActionLink<ProductsController>(c => c.Edit(Model.Id), "Edit") %> |
    <% using (Html.BeginForm<ProductsController>(c => c.Destroy(Model.Id))) { %>
        <%: Html.HttpMethodOverride(HttpVerbs.Delete) %>
        <input type="submit" value="Delete" />
    <% } %>
</td>

当然,假设您的ProductsController中存在以下操作:

public ActionResult Edit(int id)
...
[HttpDelete]
public ActionResult Destroy(int id)

我还邀请您查看我写的sample MVC application,其中说明了这些概念。