ObjectContext实例已被处理,不能再用于需要连接的操作?

时间:2013-02-23 21:44:27

标签: asp.net-mvc

Index.cshtml

<div class="news_content_container">
    @Html.Action("_AddImagesToNews", "PostImages")
</div>

_AddImagesToNews.cshtml

<div>
    @using (Html.BeginForm("_AddImagesToNews", "PostImages", FormMethod.Post, new { id = "form_post_images" }))
    {
        @Html.Hidden("Id", (int)ViewBag.newsId)
        <div class="editor-label">
            <input type="file" name="Files" id="Files" multiple="multiple" />
        </div>

        <div class="submit-field">
            <input type="submit" value="Ekle" class="button_gray_small" />
        </div>
    }
</div>
<div class="images_content_container">
    @Html.Partial("_PostImages", Model.ToList())
</div>

_PostImages.schtml

@model IEnumerable<NewsCMS.DAL.EDM.PostImages>

@foreach (var item in Model)
{
    <img src="~/@(item.MiddleImageUrl)" alt="@(item.Posts.Title)" />
}

控制器操作

public ActionResult _AddImagesToNews(int Id)
{
    using (NewsCMSEntities entity = new NewsCMSEntities())
    {
        ViewBag.newsId = Id;
        return PartialView(entity.PostImages.Where(x => x.PostId == Id).ToList());
    }
}

加载视图时,我会收到标题错误。我找不到原因。如果我在 _PostImages.cshtml 中编写@Model.Count(),则会显示正确的值且没有错误。

我错过了什么?

...谢谢

4 个答案:

答案 0 :(得分:2)

我想我明白了。试试这个

return PartialView(entity.PostImages.include("Posts").Where(x => x.PostId == Id).ToList());

答案 1 :(得分:1)

我解决了。我通过了以下模型。

var images = entity.PostImages.Where(x => x.PostId == Id).ToList();
return PartialView(images);

另外,感谢所有重播,尤其是@DaveA ......

我想,我总是应该这样使用。

答案 2 :(得分:0)

在视图中传递实体时,在范围完成时处理上下文 在视图中,您通过item.Posts.Title访问对象,只能通过上下文访问。至于显示title,有关Posts的其他数据必须重新审核

使用Model.Count()是正确的,因为在完成.ToList()之后不需要检索更多数据,并且可以在本地计算lis中的成员数

答案 3 :(得分:0)

这个问题通常是在缺少具体对象并且需要'.ToList()'时引起的,但在给定代码中并非如此。

如果您正在使用从布局或其他部分视图中的数据库检索的数据,请确保它们是具体对象(通过使用.ToList())。

您应该尝试使用IntelliTrace来查看抛出异常的确切位置(可能位于其他位置)。