2013-06-15 24 views
5

Tôi xuất bản dự án của mình mà không có bất kỳ cảnh báo nào về iis cục bộ và hoạt động chính xác (localhost/[myprojectName]). vì vậy, tôi tải chúng lên máy chủ với ftp dễ thương. nhưng trong máy chủ tôi nhận được lỗi này apear cho tất cả của tôi nộp như [tableName] [filedName]:.Lỗi: "Không tìm thấy trường hoặc thuộc tính có tên trên nguồn dữ liệu đã chọn" chỉ trên máy chủ

A field or property with the name 'ConfirmStatuse.Name' was not found on the selected data source

đây là mã của tôi:

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

tôi kiểm tra kích thước của dự án của tôi trong IIS địa phương và trên máy chủ. cả hai đều giống nhau (8,459,009 bytes)

vì vậy nó có nghĩa là tôi sử dụng cùng một cơ sở dữ liệu và các tệp tương tự để chạy ứng dụng của tôi để chạy trên máy chủ cục bộ và máy chủ. vậy tại sao tôi nhận được lỗi này chỉ trong máy chủ?

Sự khác biệt duy nhất ở đây là trên phiên bản của iis, tôi nghĩ phiên bản iis máy chủ của tôi là 7.0. nhưng điều quan trọng là tôi có lỗi này? !!! tôi không nghĩ vậy. Tôi thực sự bối rối.

(Dự án và dự án máy chủ cục bộ của tôi sử dụng cùng một chuỗi kết nối).

EDIT: Tôi xuất bản dự án trên một máy chủ khác và nó hoạt động! nhưng nó không hoạt động trên máy chủ gốc của tôi.

+0

Kết quả Đối tượng truy vấn LINQ không có thuộc tính được cung cấp. Chính xác những gì không rõ ràng cho bạn? Thông báo lỗi khá thẳng về phía trước. – abatishchev

+1

xin chào, tôi có thuộc tính đó trong truy vấn kết quả của mình. thông báo lỗi là khá rõ ràng nhưng tại sao nó hoạt động trên địa phương nhưng không hoạt động trên máy chủ. Tôi kiểm tra tất cả mọi thứ. tất cả đều giống nhau. @abatishchev – Mohammadreza

+0

Được rồi, tôi hiểu. Hmm. Có thể bạn có một sai lầm ngớ ngẩn nhưng ẩn trong triển khai: bạn có chắc là bạn đã sao chép ứng dụng đúng cách và các tập hợp không được lưu vào bộ nhớ cache không? Kiểm tra hai lần. Và cố gắng xóa thư mục Temp ASP.NET Files. – abatishchev

Trả lời

3

Tôi tìm thấy Phiên bản IIS trên máy chủ của tôi là 6. nhưng địa phương của tôi là 7.5. tôi công bố dự án của tôi trên máy chủ khác với IIS 7.5 và nó hoạt động

Solution1: Tôi tạo ra một summaryOfOrder như thế này:

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


    } 

và thay đổi

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

để

<asp:BoundField DataField="ConfirmStatusName" /> 

và bin d lớp lưới bằng

gv.datasource = mySummryOfOrder; 
gv.databind(); 

và khởi tạo một danh sách các loại này và ràng buộc nó vào lưới lập trình

Cập nhật giải pháp 2 chuyển đổi

asp:BoundField

để

asp:TemplateField and using

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

Điều đó khiến nó hoạt động sau một thời gian dài! Nhưng không biết tại sao vấn đề đã xảy ra sau khi triển khai trên máy chủ khác nhau, nó đã làm việc một cách chính xác với boundfield trên địa phương của tôi. Có phải vì tôi có .NET 4.5 trên máy tính của tôi có EF 6 nơi máy chủ triển khai có .NET 4 và có lẽ với EF6? –

+0

Tôi không chắc chắn nhưng nghĩ rằng đó là vì IIS @ AltafPatel – Mohammadreza

+0

Cả hai máy đều có IIS 6.1, ngoại trừ sau đó có SP2. @Mohammadreza –

5

Đây là vấn đề tương tự với vấn đề được mô tả ở đây - 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

Dường như đây là vấn đề với phần tử điều khiển BoundField. Như được đề xuất trong an answer provided by user Anant trong bài viết được liên kết ở trên, bạn có thể chuyển đổi BoundField thành TemplateField và nó sẽ hoạt động (sử dụng "OrderStatuse.Name" trong ví dụ của bạn). Giải pháp đó làm việc cho tôi.

Mặc dù điều này thực sự không giải thích lý do tại sao IIS6 không thể hỗ trợ BoundField theo cách này.

Tâm boggling.

+0

cảm ơn bạn rất nhiều – Mohammadreza

2

Tôi đã sắp xếp với việc thêm các trường bị ràng buộc đó vào truy vấn đã chọn.

Thông báo lỗi:

A field or property with the name 'tax_percentage' was not found on the selected data source

Giải pháp:

Tôi không chọn tax_percentage trong truy vấn chọn để thông báo lỗi trên đến. Chỉ cần chọn tax_percentage trong truy vấn của tôi.

2

Nếu nguồn dữ liệu của bạn là một danh sách các đối tượng, xác nhận rằng các thuộc tính của lớp học của bạn được definied như công cộng, như thế này:

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

đối diện:

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

Trân