Asp.net 错误:";在所选数据源上找不到名为“”的字段或属性;仅在服务器上获取

Asp.net 错误:";在所选数据源上找不到名为“”的字段或属性;仅在服务器上获取,asp.net,.net-4.0,iis-7.5,sql-server-2012,Asp.net,.net 4.0,Iis 7.5,Sql Server 2012,我在本地iis上发布我的项目时没有任何警告,并且它工作正常(localhost/[myprojectName])。所以,我用可爱的ftp把它们上传到服务器上。但在服务器中,我的所有文件(如[tableName]。[filedName])都会出现此错误: 找不到名为“”confirmStatus.name“的字段或属性 在选定的数据源上 这是我的密码: <asp:GridView ID="ordergv" runat="server" DataKeyNames="Id" AutoGenera

我在本地iis上发布我的项目时没有任何警告,并且它工作正常(localhost/[myprojectName])。所以,我用可爱的ftp把它们上传到服务器上。但在服务器中,我的所有文件(如[tableName]。[filedName])都会出现此错误:

找不到名为“”confirmStatus.name“的字段或属性 在选定的数据源上

这是我的密码:

<asp:GridView ID="ordergv" runat="server" DataKeyNames="Id" AutoGenerateColumns="False" DataSourceID="SummaryOfOrderSrc" AllowSorting="True">
    <Columns>
        <asp:CommandField SelectText="select" ShowSelectButton="True" ButtonType="Button"/>
        <asp:BoundField DataField="OrderId"  />
        <asp:BoundField DataField="ConfirmStatuse.Name"  />
        <asp:BoundField DataField="OrderStatuse.Name"/>
        <asp:BoundField DataField="PaymentStatuse.Name"/>
        <asp:BoundField DataField="ShipmentStatuse.Name" />
        <asp:TemplateField >
            <ItemTemplate>
          <asp:Label ID="CreatedDateLabel" runat="server" Text='<%# GetPersianDate( Eval("CreatedDate")) %>' /></ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

<asp:LinqDataSource ID="SummaryOfOrderSrc" runat="server" ContextTypeName="Ahooratech.DAL.DataClasses1DataContext" EntityTypeName="" OrderBy="CreatedDate desc" TableName="Orders">
</asp:LinqDataSource>

我在本地iis和服务器上检查项目的大小。它们都相同(8459009字节)

所以这意味着我使用相同的数据库和文件来运行我的应用程序,以便在本地和服务器上运行。那个么为什么我只在服务器上得到这个错误呢

这里唯一的区别是iis的版本,我认为我的服务器iis版本是7.0。但这对我犯这个错误重要吗?!!!我不这么认为。我真的很困惑

(我的本地项目和服务器项目使用相同的连接字符串)


编辑:我在另一台主机上发布项目,它可以工作!但它在我原来的服务器上还不能工作

我发现我的服务器上的IIS版本是6。但我的本地版本是7.5。 我使用iis 7.5在另一台服务器上发布了我的项目,它可以正常工作

解决方案1:我创建了一个如下顺序的汇总:

class summaryOfOrder
    {
        public int Id { get; set; }
        public int OrderId { get; set; }
        public string ConfirmStatusName { get; set; }
        public string OrderStatusName { get; set; }
        public string PaymentStatusName { get; set; }
        public string ShippingStatusName { get; set; }
        public string CreatedDate { get; set; }


    }
class YourClass
{
    public int Id { get; set; }
    public string Name{ get; set; }
}
改变

<asp:BoundField DataField="ConfirmStatuse.Name"  />
并初始化此类型的列表,并以编程方式将其绑定到网格

更新解决方案2转换

asp:BoundField

asp:TemplateField 和使用


这与此处描述的问题相同-

这似乎是BoundField控件元素的问题。正如上面链接的文章中所建议的那样,您可以将BoundField转换为TemplateField,这样就可以了(在您的示例中使用“orderstatus.Name”)。这个解决方案对我有效

虽然这并不能解释为什么IIS6不能以这种方式支持BoundField


难以置信。

我在所选查询中添加了这些绑定字段

错误消息:

在所选数据源上找不到名为“tax_percentage”的字段或属性

解决方案:


我没有在select查询中选择税收百分比,因此出现了上述错误消息。只需在我的查询中选择
tax\u percentage

如果您的数据源是对象列表,请证明您的类的属性定义为public,如下所示:

class summaryOfOrder
    {
        public int Id { get; set; }
        public int OrderId { get; set; }
        public string ConfirmStatusName { get; set; }
        public string OrderStatusName { get; set; }
        public string PaymentStatusName { get; set; }
        public string ShippingStatusName { get; set; }
        public string CreatedDate { get; set; }


    }
class YourClass
{
    public int Id { get; set; }
    public string Name{ get; set; }
}
与之相反:

class YourClass
{
    private int Id { get; set; }
    private string Name{ get; set; }
}

结果LINQ查询对象没有给定的属性。你到底不清楚什么?错误消息非常直截了当。嗨,亲爱的,我的结果查询中有这个属性。错误消息非常清楚,但为什么它在本地工作,而在服务器上不工作。我检查所有的东西。一切都一样@abatishchevOkay,我明白了。嗯。也许你在部署中有一个愚蠢但隐藏的错误:你确定你已经正确复制了应用程序并且没有缓存程序集吗?仔细检查。并尝试删除临时ASP.NET文件文件夹。是。我还删除了所有这些文件并发布它们。它们的大小完全相同,即使是字节8459009。我真的很困惑@abatishchev。我可以问什么或者搜索这个错误?!我也有这个问题。我可以完全控制本地和web服务器环境,并确保代码/数据库完全相同。这似乎确实是一个版本问题。在尝试了很长时间后,它开始工作了!但我不知道为什么在部署到不同的服务器后会出现问题,它在我的本地服务器上使用boundfield时工作正常。这是因为我的机器上有.NET 4.5,它有EF 6,而部署服务器有.NET 4,可能还有EF6?我不确定,但认为这是因为IIS。@Altafpatel这两台机器都有IIS 6.1,只是后来有了SP2@默罕默德雷扎
class YourClass
{
    private int Id { get; set; }
    private string Name{ get; set; }
}