【问题标题】:The ObjectContext instance has been disposed and can no longer be used for operations that require a connection?ObjectContext 实例已被释放,不能再用于需要连接的操作?
【发布时间】:2013-02-23 21:44:26
【问题描述】:

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(),它会显示正确的值而没有错误。

我错过了什么?

谢谢...

【问题讨论】:

  • 我注意到子操作(发布)_AddImagesToNews 返回 _PostImages 部分。我从未尝试过,但听起来很可疑。尝试将发布操作方法重命名为 _PostImages
  • 请包含您的数据库操作部分
  • 很抱歉,我在查看加载时出现错误,而不是在发布后。问题出在 HttpGet 方法中。
  • 我明白了,添加您的数据库操作部分。它可能就在那里。
  • 我在发帖前遇到错误。我的意思是第一次加载。永远不会触发 HttpPost 方法。因为视图永远不会加载。

标签: asp.net-mvc


【解决方案1】:

我想我明白了。试试这个

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

【讨论】:

    【解决方案2】:

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

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

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

    我想,我应该一直用这种方式。

    【讨论】:

    • 我想知道它是如何导致问题的。据我所知,在将“图像”值传递给视图之前对其进行评估,因此评估后不需要 ObjectContext。
    • @DaveA,您的建议也有效,而且您的建议更优雅。如果你再写,我会接受你的。
    【解决方案3】:

    在视图中传递实体时,上下文在范围完成时被释放
    并且在视图中,您正在通过 item.Posts.Title 访问一个对象,该对象只能通过上下文访问。至于显示title 有关Posts 的其他数据将不得不被检索

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

    【讨论】:

    • 感谢重播。我已经知道了,但我该如何解决?
    【解决方案4】:

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

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

    您应该尝试使用 IntelliTrace 来查看引发异常的确切位置(可能在其他地方)。

    【讨论】:

    • 但他正在使用 tolist() :(
    猜你喜欢
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多