【问题标题】:MVC 3 Getting error when passing data from controller to viewMVC 3 将数据从控制器传递到视图时出现错误
【发布时间】:2012-07-30 16:32:03
【问题描述】:

我收到了这个错误。

传入字典的模型项的类型为“System.Data.Entity.Infrastructure.DbQuery1[<>f__AnonymousType13[ACapture.Models.Blog,ACapture.Models.Image,ACapture.Models.Profile]]”,但是此词典需要“System.Collections.Generic.IEnumerable`1[ACapture.Models.Blog]”类型的模型项。

这是我的控制器。

public class HomeController : Controller
{
    private ACaptureDB db = new ACaptureDB();

    public ViewResult Index()
    {
        ViewBag.Message = "ArchiCapture";
        var dateCheck = DateTime.Now.AddDays(-7);

        var results = (from r in db.Blog
                      join p in db.Image on r.ImageID equals p.ImageID
                      //join l in db.Account on p.AccountID equals l.AccountID
                      join a in db.Profile on p.AccountID equals a.AccountID
                      //where r.dte_created >= dateCheck
                       select new { r, p, a });

        return View(results);
    }

这是我的看法。

@model IEnumerable<ACapture.Models.Blog>

@{
    ViewBag.Title = "Home Page";
}

<div class="Forum">
    <p>The Forum</p>

            @foreach (var item in Model)
            {
                <div class="ForumChild">
                    <img src="@item.Image.img_path" alt="Not Found" />
                    <br />
                        <table>
                            @foreach (var comment in item.comment)
                            {
                                var db = new ACapture.Models.ACaptureDB();

                                var Name = from p in db.Profile
                                           where (p.AccountID == comment.AccountID)
                                           select new { p.FirstName, p.LastName };


                                <tr><td></td><td>@comment.Commentation</td></tr>
                            }
                        </table>
                </div>                
            }
</div>

每当数据从控制器传递到视图时,就会发生错误。

我还需要博客、图片和个人资料三个表中的数据

【问题讨论】:

    标签: asp.net-mvc-3 linq entity-framework linq-to-entities


    【解决方案1】:

    您的视图需要 ACapture.Models.Blog 的 IEnumerable。但是,您的查询和联接将返回一个新的 {Blog, Image, Profile}。就像您在 SQL 中进行连接并且不指定列时一样,您会将它们全部取回。这将创建一个匿名类型。您只想为博客选择{r}

    【讨论】:

    • 如果我还需要其他 2 个表(Profile 和 Image)中的数据怎么办?
    • @dright...您需要创建一个模型对象来表示所有 3 个表中的数据。
    • @Dright....另外,如果您将模型结构设置为父/子关系,EF 将返回一个指向图像的博客列表,指向配置文件。跨度>
    【解决方案2】:

    您正在使用投影来创建匿名类型。您的视图需要一个 IEnumerable。尝试选择新博客 { }

    【讨论】:

    • 喜欢这个?选择新博客 { r, p, a } );它说不能用集合初始化器初始化类型'ACapture.Models.Blog',因为它没有实现'System.Collections.IEnumerable
    • 调用 ToList() 就可以了。在您看来,只需将您的模型设为 List
    【解决方案3】:

    您将IEnumerable&lt;anonymous type&gt; 作为模型传递,而视图需要IEnumerable&lt;ACapture.Models.Blog&gt;。试试

    public ViewResult Index()
    {
        ViewBag.Message = "ArchiCapture";
        var dateCheck = DateTime.Now.AddDays(-7);
    
        var results = (from r in db.Blog
                      join p in db.Image on r.ImageID equals p.ImageID
                      //join l in db.Account on p.AccountID equals l.AccountID
                      join a in db.Profile on p.AccountID equals a.AccountID
                      //where r.dte_created >= dateCheck
                       select r);
    
        return View(results);
    }
    

    【讨论】:

    • 如果我需要 Image 和 Profile 表中的数据怎么办?
    • 然后你必须创建一个包含它们的专用视图模型,并选择它。
    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    相关资源
    最近更新 更多