none
在演练vs2008例子时,始终不能通过 RRS feed

  • 问题

  •  

    在演练:ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_vwdcon/html/a1bfc727-1758-481d-a914-284fcabb83d1.htm

    时始终通不过.错误提示为:

     

    “/Web”应用程序中的服务器错误。

    未能加载类型“ReviewsDataContext”。

    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

    异常详细信息: System.Web.HttpException: 未能加载类型“ReviewsDataContext”。

    源错误:

    执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

    堆栈跟踪:

    [HttpException (0x80004005): 未能加载类型“ReviewsDataContext”。]
       System.Web.Compilation.BuildManager.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase) +565
       System.Web.UI.WebControls.LinqDataSourceView.get_ContextType() +68
    
    [InvalidOperationException: 找不到在 LinqDataSource“LinqDataSource1”的 ContextTypeName 属性中指定的类型。]
       System.Web.UI.WebControls.LinqDataSourceView.get_ContextType() +193
       System.Web.UI.WebControls.LinqDataSourceView.CreateContextAndTable() +458
       System.Web.UI.WebControls.LinqDataSourceView.EnsureContextAndTable(Boolean selecting) +39
       System.Web.UI.WebControls.LinqDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +421
       System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +17
       System.Web.UI.WebControls.DataBoundControl.PerformSelect() +149
       System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +70
       System.Web.UI.WebControls.DetailsView.DataBind() +4
       System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +82
       System.Web.UI.WebControls.DetailsView.EnsureDataBound() +181
       System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +69
       System.Web.UI.Control.EnsureChildControls() +87
       System.Web.UI.Control.PreRenderRecursiveInternal() +50
       System.Web.UI.Control.PreRenderRecursiveInternal() +170
       System.Web.UI.Control.PreRenderRecursiveInternal() +170
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2041
    

     

    而且在Reviews.dbml设计视图里右键查看源代码时出现:未将对象引用设置到对象的实例.

     

    在aspx页面中给LinqDataSource控件配置数据源>选择上下文页,按下一步,就出现:

     

    无法加载类型"ReviewsDataContext".如果该类型位于"App_Code '文件夹中,请检查是否已编译.如果该类型位于已编译类型中,请检查该程序集是否被该项目引用.

     

     

    2008年4月22日 14:14

答案

  • 我测试了一下,是没有任何问题的。不过,在做的时候,实体类的MovieID自动生成的是MovieID_MovieID,可以改成MovieID。

    另外检查一下你的程序里面是否带名称空间了。实体类配置完毕后,可以直接将下面的代码拷贝到aspx里

     

    Code Snippet

     

    <asp:LinqDataSource
      ContextTypeName="ReviewsDataContext"
      TableName="MovieReviews"
      AutoPage="true"
      EnableUpdate="true"
      EnableInsert="true"
      EnableDelete="true"
      ID="LinqDataSource1"
      runat="server">
    </asp:LinqDataSource>
     <asp:DetailsView
      DataSourceID="LinqDataSource1"
      DataKeyNames="MovieID"
      AutoGenerateRows="false"
      AutoGenerateEditButton="true"
      AutoGenerateInsertButton="true"
      AutoGenerateDeleteButton="true"
      AllowPaging="true"
      ID="DetailsView1"
      runat="server">
      <Fields>
        <asp:BoundField HeaderText="Title" DataField="Title" />
        <asp:BoundField HeaderText="Theater" DataField="Theater" />
        <asp:BoundField HeaderText="Number of Stars" DataField="Score" />
        <asp:BoundField HeaderText="Review" DataField="Review" />
      </Fields>
    </asp:DetailsView>

     

    即可
    2008年4月23日 0:53
    版主
  • 从VS 2005 sp1 开始,对于website的项目VS支持两个模板,一个是像VS2003中的方式,创建的站点将所有的文件都编译到bin目录下的dll中,类似winform project的模式,也就是您说的通过 new project\website application 创建的项目。

    另一种是VS2005中新增的,VS IDE不会编译DLL文件,而是通过IIS动态编译。也就是您说的 new website\website project. 这是两种模板使用不同的编译模式。

     

    在VS2005推出了新的站点模板之后,由于很多用户都依旧习惯于之前的VS2003中站点模板,所以微软在vs 2005 sp1中,又重新将这种类似winform project的编译方式加回到了VS中。所以就造成了您所看到的两种website项目模板的情况。

     

    但是据我所知,这个因该并不会影响到您的站点的运行,只要您的代码正确的话,无论是在那种模式下,都是能够正常运行的。

     

    谢谢

    王文渊

    2008年4月24日 11:02

全部回复

  • 在上下文选择那页的下拉列表里出现了ReviewsDataContext吗?

     

    请尝试重新编译一下整个Project,然后再编码。

    2008年4月22日 14:43
    版主
  • 我测试了一下,是没有任何问题的。不过,在做的时候,实体类的MovieID自动生成的是MovieID_MovieID,可以改成MovieID。

    另外检查一下你的程序里面是否带名称空间了。实体类配置完毕后,可以直接将下面的代码拷贝到aspx里

     

    Code Snippet

     

    <asp:LinqDataSource
      ContextTypeName="ReviewsDataContext"
      TableName="MovieReviews"
      AutoPage="true"
      EnableUpdate="true"
      EnableInsert="true"
      EnableDelete="true"
      ID="LinqDataSource1"
      runat="server">
    </asp:LinqDataSource>
     <asp:DetailsView
      DataSourceID="LinqDataSource1"
      DataKeyNames="MovieID"
      AutoGenerateRows="false"
      AutoGenerateEditButton="true"
      AutoGenerateInsertButton="true"
      AutoGenerateDeleteButton="true"
      AllowPaging="true"
      ID="DetailsView1"
      runat="server">
      <Fields>
        <asp:BoundField HeaderText="Title" DataField="Title" />
        <asp:BoundField HeaderText="Theater" DataField="Theater" />
        <asp:BoundField HeaderText="Number of Stars" DataField="Score" />
        <asp:BoundField HeaderText="Review" DataField="Review" />
      </Fields>
    </asp:DetailsView>

     

    即可
    2008年4月23日 0:53
    版主
  • 谢谢孟兄.我这里的问题已经解决.原因是这样的:如果创建项目里新建一个网站,这个例子不会通过的.现在我在新建网站里建立了网站,这个例子运行成功的.我现在是不明白微软把这个东西搞的够复杂的哦,为什么有这样的差别呢.在新建项目里新建网站后>添加asp.net文件夹里是没有没有App_Code的文件夹的,所以出现了如上的错误.在生成的Reviews.designer.cs文件里会自动加上一个命名空间WebApplication1.App_Code的,如果关闭后,打开这个Reviews.designer.cs文件会提示找不到了。总之是在创建网站开始选择上的错误。不知道孟兄对这些区别了解否,很想知道。谢谢!

    2008年4月23日 6:19
  • 从VS 2005 sp1 开始,对于website的项目VS支持两个模板,一个是像VS2003中的方式,创建的站点将所有的文件都编译到bin目录下的dll中,类似winform project的模式,也就是您说的通过 new project\website application 创建的项目。

    另一种是VS2005中新增的,VS IDE不会编译DLL文件,而是通过IIS动态编译。也就是您说的 new website\website project. 这是两种模板使用不同的编译模式。

     

    在VS2005推出了新的站点模板之后,由于很多用户都依旧习惯于之前的VS2003中站点模板,所以微软在vs 2005 sp1中,又重新将这种类似winform project的编译方式加回到了VS中。所以就造成了您所看到的两种website项目模板的情况。

     

    但是据我所知,这个因该并不会影响到您的站点的运行,只要您的代码正确的话,无论是在那种模式下,都是能够正常运行的。

     

    谢谢

    王文渊

    2008年4月24日 11:02