2009-11-09 4 views
0

J'ai une connexion à la base de données qui reçoit une entrée de la chaîne de requête pour accéder aux données appropriées. Cependant, j'ai maintenant mis à jour les choses en encodant ces données. Par conséquent, j'ai maintenant besoin d'exécuter la valeur QueryString à travers une fonction pour l'unencoder.Utilisation d'une ligne de code de codebehind dans la page HTML réelle

À l'heure actuelle i ont ce code pour le DataSource:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:spareathoughtConnectionString %>" 
        SelectCommand="campaign_Statistics" SelectCommandType="StoredProcedure"> 
        <SelectParameters> 
         <asp:QueryStringParameter DefaultValue="0" Name="tmp_Campaign" 
          QueryStringField="camp" Type="Int64" /> 
        </SelectParameters> 
       </asp:SqlDataSource> 

La valeur QueryString est 'camp'.

Dans mon code, je voudrais traiter cette valeur via le code suivant;

Convert.ToInt64(HttpUtility.UrlDecode(TamperProofQueryString.decode(Request.QueryString["camp"]))) 

Alors, comment intégrer la ligne de code ci-dessus dans la source de données? c'est-à-dire que j'ai besoin de remplacer efficacement 'camp' par 'Convert.ToInt64 (HttpUtility.UrlDecode (TamperProofQueryString.decode (Request.QueryString ["camp"])))'

J'espère que cela a du sens?

Merci

Répondre

2

changement à une <asp:Parameter plaine plutôt qu'un <asp:QueryStringParameter. Puis gérer l'événement OnSelecting pour la source de données. Vous devriez être en mesure de définir la valeur du paramètre pour SqlCommand dans votre code derrière.

Dans le balisage ASPX:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
       ConnectionString="<%$ ConnectionStrings:spareathoughtConnectionString %>" 
       SelectCommand="campaign_Statistics" SelectCommandType="StoredProcedure" 
       OnSelecting="SqlDataSource1_Selecting"> 
    <SelectParameters> 
     <asp:Parameter DefaultValue="0" Name="tmp_Campaign" Type="Int64" /> 
    </SelectParameters> 
</asp:SqlDataSource> 

Dans le code-behind:

protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e) 
{ 
    e.Command.Parameters["@tmp_Campaign"].Value = Convert.ToInt64(TamperProofQueryString.decode(HttpUtility.UrlDecode(Request.QueryString["camp"]))); 
} 

Aussi, regardant cela, ne devrait pas vous urldecode avant le decode Inviolables?

+0

Je ne suivez pas votre explication désolé. – Munklefish

+0

Merci pour cela. En ce qui concerne UrlEncode/Decode je fais actuellement comme suit et cela fonctionne très bien, bien qu'il semble que vous soyez techniquement correct. Veuillez commenter: Pour coder: HttpUtility.UrlEncode (TamperProofQueryString.encode ("wibble")); Pour décoder: HttpUtility.UrlDecode (TamperProofQueryString.decode ("wibble")); – Munklefish

+0

Ive maintenant changé à: TamperProofQueryString.decode (HttpUtility.UrlDecode ( semble toujours fonctionner de la même manière, bien que devrait maintenant être techniquement dans le bon ordre.) – Munklefish

1

Si vous voulez faire tout cela sans behind, vous pouvez faire quelque chose comme:

<asp:SqlDataSource 
    ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:spareathoughtConnectionString %>" 
    SelectCommand="campaign_Statistics" SelectCommandType="StoredProcedure"> 
</asp:SqlDataSource> 
<% 
    SqlDataSource1.SelectParameters.Add(
     "tmp_Campaign", 
     Convert.ToString(HttpUtility.UrlDecode(TamperProofQueryString.decode(Request.QueryString["camp"])))); 
%> 
+0

Cela ne semble pas fonctionner. – Munklefish