453 messaggi dal 11 febbraio 2013
Ciao
questa domanda segue a quella sul sito multilingua in webform

Scusate la domanda da babbano/babbeo ma come posso cambiare campo in base al cookie

Esempio il cookie che contiene la lingua è Russo cosi quando mostro la descrizione del prodotto dovrei appunto cambiare il campo da "descrizione" a "descrizione_RU"

<asp:Repeater ID="details" runat="server"
        SelectMethod="GetProduct" ItemType="BEP_ARTICOLO" >
        <ItemTemplate>
        <%#:Item.Descrizione%> ...ecc


come si fà ?

stavo proprio sbarellando tipo

<% if (Request.Cookies["UserLanguage"] != null)
                           {   
                               HttpCookie CookieKey = Request.Cookies["UserLanguage"];
                               String cookieValue = CookieKey.Value.Split('=')[1];
                               switch (cookieValue)
                               {
                                   case ("it-IT"): %>
                                       <%#: Item.Descrizione_IT %>
                                       <% 
                                       break;
                                   case ("en-US"): %>
                                       <%#: Item.descrizione_EN %>
                                       <% 
                                       break;
                                   case ("es-AR"): %>
                                       <%#: Item.descrizione_ES %>
                                       <%
                                       break;
                               }
                           } %>   


Cosi funziona ma mi pare una soluzione del cavolo...
Modificato da jjchuck il 08 settembre 2017 16.51 -
10.265 messaggi dal 09 febbraio 2002
Contributi
Ciao,
l'oggetto che stai usando possiede le proprietà Descrizione_IT, Descrizione_EN e Descrizione_ES, ma non deve essere per forza così. Potresti predisporre un altro oggetto (diverso da quello che hai) che ha solo la proprietà "Descrizione". Infatti è inutile caricare dal database le descrizioni per tutte le lingue se poi mostrerai a video soltanto una di esse.

Quando invii la tua query al database per recuperare la descrizione in lingua, fai una query del genere:

var query = $"SELECT Id, Descrizione_{lingua} as Descrizione FROM Tabella";

...dove la variabile lingua contiene il valore sanitizzato ottenuto dal cookie.
In questo modo ti basterà stampare la proprietà Descrizione.

ciao,
Moreno

Enjoy learning and just keep making
453 messaggi dal 11 febbraio 2013
Uso linq to entities nel selectmethod

cmq potrei usare lo stesso una query al db... anche se onestamente non ho capito cosa
faccia quella interrogazione che mi suggerisci

come funziona

grazi mille
10.265 messaggi dal 09 febbraio 2002
Contributi
La query che ti ho postato seleziona l'Id e una delle descrizioni. Il campo viene selezionato in base al valore di una variabile lingua. Ad esempio, se lingua vale "IT", verrà selezionato il campo Descrizione_IT. Siccome ho anche scritto as Descrizione, il campo assumerà il nome Descrizione nel momento in cui lo vai a leggere.

La riscrivo senza usare le stringhe interpolate di C# 7, forse è più chiaro.

string lingua = "IT"; //Questo valore l'hai ottenuto in base al contenuto del cookie
string query = "SELECT Id, Descrizione_" + lingua + " as Descrizione FROM Tabella";
//Ora esegui la query



Uso linq to entities nel selectmethod

Ok, come dici giustamente puoi inviare query sql al database ed ottenere indietro una lista di oggetti che non devono obbligatoriamente essere delle entità.
https://msdn.microsoft.com/en-us/library/jj592907(v=vs.113).aspx#Anchor_1

Se volessi continuare ad usare Linq to entities, ci sono delle soluzioni, come per esempio comporre l'albero di espressioni dinamicamente.
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/expression-trees/how-to-use-expression-trees-to-build-dynamic-queries

ciao
Modificato da BrightSoul il 08 settembre 2017 22.19 -

Enjoy learning and just keep making
453 messaggi dal 11 febbraio 2013
Stringhe Interpolate... ma quando finirà ? quando impareranno ? :) :) :)

ok non ci avevo pensato alla prima soluzione
l'ultima proprio non la conoscevo

grazie 1000

ps anche un let nella query linq funzionerebbe...
Modificato da jjchuck il 11 settembre 2017 09.17 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.