MVC 3将数据从控制器传递到视图时出错

时间:2012-08-01 18:06:18

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

我收到了这个错误。

传递到字典中的模型项的类型为'System.Data.Entity.Infrastructure.DbQuery 1[<>f__AnonymousType1 3 [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>

只要数据从控制器传递到视图,就会发生错误。

此外,我需要来自所有三个表博客,图片和个人资料

的数据

3 个答案:

答案 0 :(得分:2)

您将IEnumerable<anonymous type>作为模型传递,而视图则需要IEnumerable<ACapture.Models.Blog>。尝试

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);
}

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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