在Razor视图中不包含'AsEnumerable'和'无法从方法组转换'的定义

时间:2016-11-21 16:01:31

标签: c# asp.net asp.net-mvc

我收到一个我无法找到解决方案的错误,就是我的模型不包含'AsEnumerable'的定义(我把整个错误放在帖子中较低),我读过它在Stack Overflow周围,所有答案似乎都指向using system.Linqusing system.Data,但我在代码中有它们。

该程序应该从表中获取一些数据:Contatti,Contacts和公司,它们位于不同的位置并将它们组合在一起(发生在控制器中的GET方法列表中),代码如下: / p>

型号:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Globalization;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

 public partial class ContactsUni2
{
    public IEnumerable<Contatti> Contattis { get; set; }
    public IEnumerable<Companies> Companies { get; set; }
    public IEnumerable<Contact> Contacts { get; set; }
}

提供错误的控制器GET:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using ContactManager.Models;

namespace ContactManager.Controllers
{
public class ContactsUni21Controller : Controller
{
    private ApplicationDbContext db = new ApplicationDbContext();
    private ContattiDB2 db2 = new ContattiDB2();

    // GET: ContactsUni21
    public ActionResult Index(String Page)
    {
        ContactsUni2 CU = new ContactsUni2();
        CU.Contattis = db.Contattis.Include(i => i.ContattoID);
        CU.Contacts = db.Contacts;
        CU.Companies = db.Companies;
        List<ContactsUni2> contactlist = new List<ContactsUni2>();
        contactlist.Add(CU.AsEnumerable()); // The error is HERE at CU.AsEnumerable(), cannot convert from method group to 'contactsuni2'
        return View(contactlist);
    }

查看,对于Contatti.Count()

也会出现类似的错误
@model IEnumerable<ContactManager.ViewModels.ContactsUni3>

@{
ViewBag.Title = "Index";
}

<h2>Contacts Unified</h2>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Contatti.Nome)
            @Html.DisplayNameFor(model => model.Contatti.Citta)
            @Html.DisplayNameFor(model => model.Contatti.ContattoID)
            @Html.DisplayNameFor(model => model.Contatti.CodicePostale)
            @Html.DisplayNameFor(model => model.Contatti.Email)
            @Html.DisplayNameFor(model => model.Contact.Address)
            @Html.DisplayNameFor(model => model.Contact.CompanyId)
            @Html.DisplayNameFor(model => model.Contact.ContactId)
            @Html.DisplayNameFor(model => model.Company.CompanyName)

        </th>
        <th></th>
    </tr>

    @foreach (var item in Model)
    {
        for (int i = 0; i < @item.Contatti.Count(); i++) // Second Error Here
        {
            <tr>
                <td>
                    @item.Contatti[i].Nome
                    @item.Contatti[i].Citta
                    @item.Contatti[i].ContattoID
                    @item.Contatti[i].CodicePostale
                    @item.Contatti[i].Email
                    @item.Contatti[i].Address
                    @item.Contatti[i].CompanyId
                    @item.Contatti[i].ContactId
                    @item.Contatti[i].CompanyName

                </td>
                <td>
                    @Html.ActionLink("Edit", "Edit", new { id = item.ContattoID }) |
                    @Html.ActionLink("Details", "Details", new { id = item.ContattoID }) |
                    @Html.ActionLink("Delete", "Delete", new { id = item.ContattoID })
                </td>
            </tr>
        }
    }

</table>
</body>
</html>

Controller GET方法中的第一个错误:

  

错误CS1929'ContactsUni2'不包含'AsEnumerable'的定义,最好的扩展方法重载'DataTableExtensions.AsEnumerable(DataTable)'需要'DataTable'类型的接收器

当我尝试这样做时,它说:

  

无法从方法组转换为“contactsuni2”

View循环中的第二个错误:

  

错误CS1061'Contatti'不包含'Count'的定义,并且没有扩展方法'Count'可以找到接受类型'Contatti'的第一个参数(你是否缺少using指令或汇编引用?)< / p>

2 个答案:

答案 0 :(得分:1)

请使用:

contactlist.Add(CU); 

方法List.Add()需要单个项目,而CU是单个项目。

要修复视图中的问题:只需在顶部添加一行@using System.Linq,以便编译器知道要查找的位置。


有关AsEnumerable的其他信息:

如果你有一个集合或一系列项目该集合与AsEnumerable()等构造不兼容,则只需要foreach (var item in collection)
在这种情况下,您可以尝试使用foreach (var item in collection.AsEnumerable())

在某些情况下,.NET Framework可能已经提供了.AsEnumerable()的实现,在其他情况下,您可能必须自己提供它。但就你的问题而言,你根本不需要它。

答案 1 :(得分:0)

您有两个不同的问题:

  1. ContactsUni21Controller您正在调用AsEnumerable的未实现IEnumerable的对象上;您尝试将ContactsUni2的实例添加到List<ContactsUni2>,而不需要在此投放,因为它是与列表相同类型的实例含

  2. 正如@CodeCaster所提到的,您没有在Razor视图中添加@using System.Linq;语句,导致您无法访问IEnumerable.Count方法