2013-06-15 10 views
5

Pubblicizzo il mio progetto senza alcun avviso su iis locale e funziona correttamente (localhost/[myprojectName]). così, li carico sul server con un simpatico ftp. ma in assistente ottengo questo errore apear per tutta la mia archiviato come [tableName] [filedName]:.Errore: "Un campo o una proprietà con il nome non è stato trovato sull'origine dati selezionata" get only on server

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

qui è il mio codice:

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

verifico le dimensioni del mio progetto in IIS locale e sul server. entrambi sono uguali (8.459.009 byte)

quindi significa utilizzare lo stesso database e gli stessi file per eseguire la mia applicazione per l'esecuzione su locale e server. quindi perché ottengo questo errore solo nel server?

L'unica differenza qui è nella versione di iis, penso che la mia versione di server iis è 7.0. ma è importante per ottenere questo errore? !!! io non la penso così sono veramente confuso.

(Il progetto locale e il progetto server utilizzano la stessa stringa di connessione).

EDIT: pubblico un progetto su un altro host e funziona! ma non funziona ancora sul mio server originale.

+0

risultante L'oggetto query LINQ non ha la proprietà fornita. Che cosa esattamente non è chiaro per te? Il messaggio di errore è abbastanza semplice. – abatishchev

+1

ciao caro, ho quella proprietà nella mia query di risultato. messaggio di errore è abbastanza chiaro, ma perché funziona su locale, ma non funziona sul server. Controllo tutte le cose. tutto è uguale. @abatishchev – Mohammadreza

+0

Ok, capisco. Hmm. Forse hai un errore stupido ma nascosto nella distribuzione: sei sicuro di aver copiato l'app correttamente e gli assembly non sono stati memorizzati nella cache? Doppio controllo E provare a eliminare la cartella Temp ASP.NET Files. – abatishchev

risposta

3

Ho trovato la versione IIS sul mio server è 6. ma il mio locale è 7.5. pubblico il mio progetto su un altro server con IIS 7.5 e funziona

Soluzione1: creo un summaryOfOrder come questo:

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


    } 

e cambiare

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

a

<asp:BoundField DataField="ConfirmStatusName" /> 

e cestino d classe griglia

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

e inizializzare un elenco di questo tipo e associarlo a griglia di programmazione

soluzione Update 2 convertire

asp:BoundField

a

asp:TemplateField and using

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

Che funzionava dopo aver provato per molto tempo! Ma non so perché si è verificato un problema dopo l'implementazione su server diversi, funzionava correttamente con boundfield sul mio locale. È perché ho .NET 4.5 sulla mia macchina che ha EF 6 dove come server di distribuzione aveva .NET 4 e probabilmente con EF6? –

+0

Non sono sicuro, ma penso che sia dovuto a IIS. @ AltafPatel – Mohammadreza

+0

Entrambe le macchine avevano IIS 6.1, tranne che in seguito avevano SP2. @Mhammadreza –

5

Questo è lo stesso problema per quello descritto qui - 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

Sembra essere un problema con l'elemento di controllo BoundField. Come suggerito in an answer provided by user Anant nell'articolo collegato sopra, è possibile convertire il BoundField in un TemplateField e funzionerà (utilizzando "OrderStatuse.Name" nell'esempio). Quella soluzione ha funzionato per me.

Anche se questo in realtà non spiega il motivo per cui IIS6 non può sostenere il BoundField in questo modo.

Mente sconvolgente.

+0

grazie mille – Mohammadreza

2

Ho risolto con l'aggiunta di quei campi associati nella query selezionata.

Messaggio di errore:

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

Soluzione:

non ho seleziono il tax_percentage nella query di selezione in modo che il messaggio di errore di cui sopra è venuto. Basta selezionare il tax_percentage nella mia query.

2

Se la vostra origine dati è un elenco di oggetti, certifica che le proprietà della classe vengono definite in quanto pubblico, in questo modo:

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

opposta a:

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

saluti