错误:"在所选数据源上找不到名称的字段或属性"仅在服务器上获取

Moh*_*eza 6 asp.net .net-4.0 iis-7.5 sql-server-2012

我在本地iis上发布我的项目时没有任何警告,它正常工作(localhost/[myprojectName]).所以,我用可爱的ftp将它们上传到服务器.但在服务器中我得到这个错误apear我所有的归档像[tableName].[filedName]:

在所选数据源上找不到名为"ConfirmStatuse.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>
Run Code Online (Sandbox Code Playgroud)

我在本地iis和服务器上检查我的项目的大小.两者都相同(8,459,009字节)

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

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

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

编辑:我在另一台主机上发布项目,它的工作原理!但它还没有在我原来的服务器上运行.

小智 5

这与此处描述的问题相同 - 绑定到导航属性导致"在IIS 6中仅在所选数据源上找不到名称为'XX'的字段或属性"

它似乎是BoundField控件元素的问题.正如用户Anant在上面链接的文章中提供的答案中所建议的那样,您可以将BoundField转换为TemplateField,它将起作用(在您的示例中使用"OrderStatuse.Name").那个解决方案对我有用.

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

令人难以置信.


Moh*_*eza 3

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

解决方案1:我创建一个summaryOfOrder,如下所示:

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; }


    }
Run Code Online (Sandbox Code Playgroud)

并改变

<asp:BoundField DataField="ConfirmStatuse.Name"  />
Run Code Online (Sandbox Code Playgroud)

<asp:BoundField DataField="ConfirmStatusName"  />
Run Code Online (Sandbox Code Playgroud)

并将类绑定到网格

gv.datasource = mySummryOfOrder; 
gv.databind();
Run Code Online (Sandbox Code Playgroud)

并初始化此类型的列表并以编程方式将其绑定到网格

更新解决方案2转换

asp:绑定字段

asp:TemplateField 并使用

<%# Eval("Worker.FullName")%>
Run Code Online (Sandbox Code Playgroud)