2014-08-29 59 views
0

Im在我的Blog项目中的App_Code文件夹中创建PostHelper.cshtml。和我在网上这个错误:cshtml c#已经有一个开放的DataReader与此连接相关联,必须先关闭

<div class="commentsTab"> 
      <a href="@Href("~/Posts/Details/" + **Post.ID + "#comments")">@Post.comments.Count**</a> 
</div> 

和:

@foreach (tag Tag in **Post.tags**) 

当林删除“@ Post.comments.Count”的罚款,但香港专业教育学院得到了类似的线,有没有错误:

<div class="postTitle"><a href="@Href("~/Posts/Details/" + Post.ID)">@Post.Title</a></div> 

这是怎么回事?有整个代码:

@using Blog.Models; 
@helper Render(post Post, System.Web.Mvc.HtmlHelper html, bool isAdmin, bool showComments) 
{ 
<div class="postTitle"><a href="@Href("~/Posts/Details/" + Post.ID)">@Post.Title</a></div> 
<div class="postContainer"> 
    <div class="postTabs"> 
     <div class="dateTab"> 
      <div class="month">@Post.DateTime.ToString("MMM").ToUpper()</div> 
      <div class="day">@Post.DateTime.ToString("dd")</div> 
     </div> 
     <div class="commentsTab"> 
      <a href="@Href("~/Posts/Details/" + Post.ID + "#comments")">@Post.comments.Count</a> 
     </div> 
    </div> 
    <div class="postContent"> 
     <div class="postBody">@html.Raw(Post.Body)</div> 
     <div class="tagList"> 
      @foreach (tag Tag in Post.tags) 
      { 
       <span class="tag"><a href="@Href("~/Posts/Tags/" + Tag.Name)">@Tag.Name</a></span> 
      } 
     </div> 
     <div class="linkList"> 
      <div id="fb-root"></div> 
      <script> 
       (function (d, s, id) { 
        var js, fjs = d.getElementsByTagName(s)[0]; 
        if (d.getElementById(id)) return; 
        js = d.createElement(s); js.id = id; 
        js.src = "//connect.facebook.net/pl_PL/sdk.js#xfbml=1&version=v2.0"; 
        fjs.parentNode.insertBefore(js, fjs); 
       }(document, 'script', 'facebook-jssdk')); 
      </script> 
     </div> 
    </div> 
</div> 
if (showComments) 
{ 
    <div id="commentContainer"> 
     <a id="comments"></a> 
     @foreach (comment Comment in Post.comments.OrderBy(x => x.DateTime)) 
     { 
      <div class="comment"> 
       <div class="commentName"> 
        @if (!string.IsNullOrWhiteSpace(Comment.Email)) 
        { 
         <a href="mailto:@Comment.Email">@Comment.Name</a> 
        } 
        else 
        { 
         @Comment.Name; 
        } 
       </div> 
       said: 
       <div class="commentBody">@html.Raw(html.Encode(Comment.Body).Replace("\n", "<br/>"))</div> 
       <div class="commentTime">at @Comment.DateTime.ToString("HH:mm") on @Comment.DateTime.ToString("yyyy/MM/dd")</div> 
      </div> 
     } 
     <div id="commentEditor"> 
      <div id="commentPrompt">Leave a comment!</div> 
      <form action="@Href("~/Posts/Comment/" + Post.ID)" method="post"> 
       <input type="text" id="commentNamePrompt" name="name" /> Name (required)<br /> 
       <input type="text" id="commentEmailPrompt" name="email" /> Email (optional)<br /> 
       <textarea id="commentBodyInput" name="body" rows="10" cols="60"></textarea><br /> 
       <input type="submit" id="commentSubmitInput" name="submit" value="Submit!" /> 
      </form> 
     </div> 
    </div> 
} 

}

我的行动:

public ActionResult Index(int? id) 
    { 
     int pageNumber = id ?? 0; 
     IEnumerable<post> posts = 
      (from Post in model.posts 
      where Post.DateTime < DateTime.Now 
      orderby Post.DateTime descending 
      select Post).Skip(pageNumber * PostsPerPage).Take(PostsPerPage + 1); 
     ViewBag.IsPreviousLinkVisible = pageNumber > 0; 
     ViewBag.IsNextLinkVisible = posts.Count() > PostsPerPage; 
     ViewBag.PageNumber = pageNumber; 
     ViewBag.IsAdmin = IsAdmin; 
     return View(posts.Take(PostsPerPage)); 
    } 
+0

显示你的动作 – 2014-08-29 12:48:20

+0

如果你的错误在'..“〜/ Posts/Details /”..'你的错误是在'Details()'方法中产生的 - 你需要发送一个 – 2014-08-29 12:55:38

+0

它的只有链接,所以它没有生成详细的错误在这个区域“+ Post.ID +”#comments“)”> @ Post.comments.Count“,当我删除@ Post.comments.Count一切都很好 – 2014-08-29 13:00:00

回答

0

我相信你的异常是由一个已经打开的连接到您不关闭数据库造成的。在你的情况下,尝试在你最初选择的末尾加上.ToList:

select Post).Skip(pageNumber * PostsPerPage).Take(PostsPerPage + 1).ToList(); 

这将关闭阅读器和复制所有结果在你的记忆。看看这是否有所作为。

+0

感谢兄弟!这对我帮助很大:在asp.net中使用D im new – 2014-08-29 13:46:49

相关问题