现在的情况是这样:
三个表,一个文章个Article和评论表Comment,和用户表User其中view中的代码如下,几个重要的地方我用红线标出来了。
其中的@item.User.UserName是取数据表User中的用户名值。但是我在使用的过程中,如果用@item.User.UserName的话,会报如下错误:与什么DataReader需要关闭。如果我把@item.User.UserName注释掉的话,可以正常显示留 言内容。而我目前的临时解决方法是在评论表加一个UserName字段,在添加评论的时候将用户名填入,但是这样会造成浪费Session,因为我在登陆成功后保存了Session["userid"]和Session["username"]二个Session。所以在不在表Comment中加字段的情况下有没有更好的解决方法来取用户名?或者哪个var comlist 这里的代码要如何改进?求方法。谢谢。新手,分不多。

解决方案 »

  1.   

    我也不太清楚啊,所有代码都在这里了。因为注释掉@item.User.UserName的话是可以。原因是不是在var comlist这个方法中?求解。
      

  2.   

    你在调用User.UserName时出错的,应该是在读取User这个方法里没有Close掉dr.
      

  3.   

    因为item.User.UserName都能.点出来,那dr需要在哪里关掉?
      

  4.   

    item.user又是另一个对象,你在for循环里面又开启了查询,所以要报错,你把查询comlist的时候变成一个tolist
      

  5.   

    comlist只是一个查询,循环时,会去执行。
    建议楼主 把model组织下,
    比如:public class ArticleModel
    {
       public Article Article{get;set;} public List<Comment> Comments{get;set;}
    }这样代码会清晰很多,
      

  6.   

    var comlist= ViewBag.comment as IQueryable<blogs.models.comment>;
    之处建议不要使用IQueryable