在asp.net MVC视图中找不到@ grid.GetHtml方法

时间:2016-11-22 05:19:24

标签: c# asp.net-mvc

我在ASP.NET MVC4中使用带有Expand / Collapse的嵌套WebGrid,但它给我一个错误找不到方法:' System.Collections.Generic.IDictionary`2 System.Web.WebPages .Html.HtmlHelper.ObjectToDictionary(System.Object)'。,我真的不知道如何解决这个错误。请帮忙。

我的视图模型

public class PackagesVM
{
    public Packages package { get; set; }
    public List<Lot> packLots { get; set; }
}

我的控制器

public ActionResult GetPackagesLot()
    {
        List<PackagesVM> packagesLots = new List<PackagesVM>();

        // here MyDatabaseEntities is our data context
        using (Entities db = new Entities())
        {
            var pack = db.Packages1.OrderByDescending(a => a.id);
            foreach (var i in pack)
            {
                var lot = db.Lots.Where(a => a.pack_id==i.id).ToList();
                packagesLots.Add(new PackagesVM { package = i, packLots = lot });
            }
        }
        return View(packagesLots);
    }   

我的观点

<div id="main" style="padding:25px; background-color:white;">
@grid.GetHtml(
htmlAttributes: new {id="gridT", width="700px" },
columns:grid.Columns(
        grid.Column("package.Id","Pack ID"),
        grid.Column("package.Name","Package Name"),
        grid.Column("package.Province_id","Province"),
        grid.Column(header:"Create at",format:(item)=> string.Format("{0:dd-MM-yyyy}",item.package.created_at)),

        grid.Column(format:(item)=>{
            WebGrid subGrid = new WebGrid(source: item.packLots);
            return subGrid.GetHtml(
                htmlAttributes: new { id="subT" },
                columns:subGrid.Columns(
                        subGrid.Column("id","Id"),
                        subGrid.Column("lot_number", "Lot Number"),
                        subGrid.Column("pack_id", "Package ID"),
                        subGrid.Column("contracted_amount", "Amount")
                    )                    
                );
        })
    )
)

我的剧本

@section Scripts{
<script>
    $(document).ready(function () {
        var size = $("#main #gridT > thead > tr >th").size(); // get total column
        $("#main #gridT > thead > tr >th").last().remove(); // remove last column
        $("#main #gridT > thead > tr").prepend("<th></th>"); // add one column at first for collapsible column
        $("#main #gridT > tbody > tr").each(function (i, el) {
            $(this).prepend(
                    $("<td></td>")
                    .addClass("expand")
                    .addClass("hoverEff")
                    .attr('title',"click for show/hide")
                );

            //Now get sub table from last column and add this to the next new added row
            var table = $("table", this).parent().html();
            //add new row with this subtable
            $(this).after("<tr><td></td><td style='padding:5px; margin:0px;' colspan='" + (size - 1) + "'>" + table + "</td></tr>");
            $("table", this).parent().remove();
            // ADD CLICK EVENT FOR MAKE COLLAPSIBLE
            $(".hoverEff", this).live("click", function () {
                $(this).parent().closest("tr").next().slideToggle(100);
                $(this).toggleClass("expand collapse");
            });
        });

        //by default make all subgrid in collapse mode
        $("#main #gridT > tbody > tr td.expand").each(function (i, el) {
            $(this).toggleClass("expand collapse");
            $(this).parent().closest("tr").next().slideToggle(100);
        });

    });
</script>

错误 } enter image description here

2 个答案:

答案 0 :(得分:0)

您需要在视图文件的 BeginForm 块中定义类似以下代码行的网格。

var grid = new WebGrid(Model.PackagesVM, canSort: false);

答案 1 :(得分:0)

还请添加此nuget包AD.System.Web.Helpers.dll