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

时间:2013-06-15 05:30:12

标签: 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>

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

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

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

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

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

4 个答案:

答案 0 :(得分:5)

这与此处描述的问题相同 - Binding to Navigation Property causes " A field or property with the name 'X.X' was not found on the selected data source" in IIS 6 ONLY

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

虽然这确实无法解释 为什么 IIS6无法以这种方式支持BoundField。

令人难以置信。

答案 1 :(得分:3)

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

Solution1 :我创建了一个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; }


    }

并更改

<asp:BoundField DataField="ConfirmStatuse.Name"  />

<asp:BoundField DataField="ConfirmStatusName"  />

并通过

将类绑定到网格
gv.datasource = mySummryOfOrder; 
gv.databind();

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

更新解决方案2 转换

  

ASP:绑定列

  

ASP:模板列   并使用

<%# Eval("Worker.FullName")%>

答案 2 :(得分:2)

我已经选择在所选查询中添加这些绑定字段。

错误讯息:

  

名称为&#39; tax_percentage&#39;的字段或媒体资源未在所选数据源中找到

解决方案:

我没有在select查询中选择tax_percentage,因此出现上述错误消息。只需在我的查询中选择tax_percentage即可。

答案 3 :(得分:2)

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

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

与...相反:

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

此致