Communiquer Javascript -> .NET

Communiquer Javascript -> .NET - C#/.NET managed - Programmation

Marsh Posté le 21-08-2007 à 11:32:46    

Bonjour,
 
J'ai un array en javascript contenant tout les ID des objets selectionnées et j'aurais voullu savoir si il y avait une solution élégante pour récuréer ce tableau dans mon code asp.net
 
D'avance merci
 
Ben

Reply

Marsh Posté le 21-08-2007 à 11:32:46   

Reply

Marsh Posté le 21-08-2007 à 11:53:10    

personnellement je ne crois pas qu'il soit possible d'avoir une interraction entre asp.net et javascript.  
Par contre entre html et asp.net cela est possible.  
 
Donc on pourrait imaginer que ton array soit copié dans un hiddenField par exemple.  
 
Sinon pour tes objets sélectionné, es-tu sure de ne pas pouvoir les récupérer en asp.net plutot qu'en javascript?  
 
s'il s'agit d'html, il suffit de les marquer runat="server" pour y avoir accès en asp.net dans le code behind.

Reply

Marsh Posté le 21-08-2007 à 12:27:55    

Salut,
Ce n'est pas possible :
 
ASP: s'execute coté serveur
Javascript : s'execute coté client
 
Tu peux peut être avoir malgres tout une piste en te penchant sur l'Ajax, je crois qu'il y a une fonction nommée "XMLHttpRequest", en tout cas cela existe pour appeler du php donc il ny' a pas de raison.
 
Tu devrais trouver pas mal d'exemple sur le net ;)
 

Reply

Marsh Posté le 21-08-2007 à 12:28:12    

Reply

Marsh Posté le 21-08-2007 à 12:48:20    

Merci c est sur ces 2 pistes que j'était partit pour l'instant je vais le faire avec un hiddenfield et ensuite j'essaierai de l'adapter en AJAX  
 
Merci à vous

Reply

Marsh Posté le 23-08-2007 à 17:43:05    

Ajax est intégralement intégré au FrameWork 3.0
 
Par contre dans le 2.0 il me semble que c'est 100% à la main. Ceci dit, c'est la solution vers laquel il me semble le plus judicieux de s'orienter.
 
Edit : Ah si, il est aussi présent dans la 2.0 sous forme d'un module additionnel "Microsoft Ajax  Extensions 1.0"
 
Là ils disent comment s'en servir avec PHP ( :heink: ) en cherchant bien tu dois pouvoir trouver comment faire avec ASP.NET ;)
http://www.microsoft.com/france/ms [...] c_php.mspx


Message édité par MagicBuzz le 23-08-2007 à 17:43:47
Reply

Marsh Posté le 23-08-2007 à 21:04:44    

Je viens de tester Atlas (c'est ça le nom des extensions Ajax pour .NET) et ça marche de la balle :)
 
Déjà, faut le télécharger (sisi c'est vrai :D) à moins que tu n'aie Visual Studio 2008, auquel cas c'est intégré dans .NET 3.0
http://download.microsoft.com/down [...] tSetup.msi
 
Tu installes la bête (avec VS fermé évidement).
Dans le doute, installe-le sur le poste de dev (obligatoirement) et sur le serveur (ça pourrait s'avérer utile vu que ça ajoute des namespace à System.UI)
 
Maintenant, on y va !
Default.aspx :

Code :
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="MainSite._Default" %>
  2. <%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
  3.    Namespace="System.Web.UI" TagPrefix="asp" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  5. <html>
  6. <head runat="server">
  7.    <title>Untitled Page</title>
  8. </head>
  9. <body>
  10.    <form id="form1" runat="server">
  11.        <asp:ScriptManager ID="ScriptManager1" runat="server" />
  12.        <asp:Timer ID="Timer1" runat="server" Interval="2000" OnTick="Timer1_Tick" />
  13.        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
  14.            <Triggers>
  15.                <asp:AsyncPostBackTrigger ControlID="Timer1" />
  16.            </Triggers>
  17.            <ContentTemplate>
  18.                Plop : <asp:Label ID="Label1" runat="server"></asp:Label>
  19.            </ContentTemplate>
  20.        </asp:UpdatePanel>
  21.        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
  22.    </form>
  23. </body>
  24. </html>


 
Default.aspx.cs :

Code :
  1. using System;
  2. using System.Web;
  3. using System.Web.UI;
  4. using System.Web.UI.WebControls;
  5.  
  6. namespace MainSite
  7. {
  8.    public partial class _Default : System.Web.UI.Page
  9.    {
  10.        protected void Page_Load(object sender, EventArgs e)
  11.        {
  12.        }
  13.  
  14.        protected void Timer1_Tick(object sender, EventArgs e)
  15.        {
  16.            if (TextBox1.Text != string.Empty)
  17.            {
  18.                Label1.Text = string.Format("=> {0} <=", TextBox1.Text);
  19.            }
  20.            else
  21.            {
  22.                Label1.Text = "Vide";
  23.            }
  24.        }
  25.    }
  26. }


 
Et le Web.Config (parceque sinon ça marche pas). On le trouve dans le répertoire d'installation d'Altas.

Code :
  1. <?xml version="1.0"?>
  2. <configuration>
  3.  <configSections>
  4.    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
  5.      <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
  6.        <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
  7.        <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
  8.          <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere" />
  9.          <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
  10.          <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
  11.        </sectionGroup>
  12.      </sectionGroup>
  13.    </sectionGroup>
  14.  </configSections>
  15.  
  16.  <system.web>
  17.    <pages>
  18.      <controls>
  19.        <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  20.      </controls>
  21.    </pages>
  22.    <!--
  23.          Set compilation debug="true" to insert debugging
  24.          symbols into the compiled page. Because this
  25.          affects performance, set this value to true only
  26.          during development.
  27.    -->
  28.    <compilation debug="false">
  29.      <assemblies>
  30.        <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  31.      </assemblies>
  32.    </compilation>
  33.  
  34.    <httpHandlers>
  35.      <remove verb="*" path="*.asmx"/>
  36.      <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  37.      <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  38.      <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
  39.    </httpHandlers>
  40.  
  41.    <httpModules>
  42.      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  43.    </httpModules>
  44.  </system.web>
  45.  <system.web.extensions>
  46.    <scripting>
  47.      <webServices>
  48.        <!-- Uncomment this line to customize maxJsonLength and add a custom converter -->
  49.        <!--
  50.      <jsonSerialization maxJsonLength="500">
  51.        <converters>
  52.          <add name="ConvertMe" type="Acme.SubAcme.ConvertMeTypeConverter"/>
  53.        </converters>
  54.      </jsonSerialization>
  55.      -->
  56.        <!-- Uncomment this line to enable the authentication service. Include requireSSL="true" if appropriate. -->
  57.        <!--
  58.        <authenticationService enabled="true" requireSSL = "true|false"/>
  59.      -->
  60.  
  61.        <!-- Uncomment these lines to enable the profile service. To allow profile properties to be retrieved
  62.           and modified in ASP.NET AJAX applications, you need to add each property name to the readAccessProperties and
  63.           writeAccessProperties attributes. -->
  64.        <!--
  65.      <profileService enabled="true"
  66.                      readAccessProperties="propertyname1,propertyname2"
  67.                      writeAccessProperties="propertyname1,propertyname2" />
  68.      -->
  69.      </webServices>
  70.      <!--
  71.      <scriptResourceHandler enableCompression="true" enableCaching="true" />
  72.      -->
  73.    </scripting>
  74.  </system.web.extensions>
  75.  
  76.  <system.webServer>
  77.    <validation validateIntegratedModeConfiguration="false"/>
  78.    <modules>
  79.      <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  80.    </modules>
  81.    <handlers>
  82.      <remove name="WebServiceHandlerFactory-Integrated" />
  83.      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
  84.           type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  85.      <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"
  86.           type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  87.      <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  88.    </handlers>
  89.  </system.webServer>
  90. </configuration>


 
Comme tu le vois, dans le ici j'ai simplement fait un bête timer côté client, qui se lance toutes les 2 secondes.
Et il va afficher ce que t'as écrit dans la textbox dans un panel juste en dessous, en faisant un peu de mise en forme.
 
Le tout est 100% codé en C#, pas une ligne de JS. Tout est donc 100% automatisé pour toi.
 
Et ça marche !
 
L'exemple sur lequel je me suis basé :
http://msdn2.microsoft.com/en-us/l [...] S.90).aspx
 
On voit le truc parler de .NET 3.0
Mais moi j'ai VS2005 Express, donc du 2.0, et ça marche aussi, à condition d'installer le truc que je t'ai mis en lien au dessus.

Reply

Marsh Posté le 24-08-2007 à 09:06:20    

Merci a tous en fait de mon coté j'ai également trouvé une petite video ici: http://asp.net/learn/ajax-videos/video-79.aspx  
 
Et donc j ai fait comme ca c est assez simple aussi.  
Le principe est d'avoir nu webservice coté c# et un JS vraiment tout bete de l'autre coté mais je me base aussi sur le ajax toolkit...

Reply

Marsh Posté le 24-08-2007 à 09:33:44    

Ben la solution d'Atlas est quand même mieux, dans la mesure ou c'est totalement transparent niveau dev : pas de JS à débuguer, la panade... Même pas besoin d'écrire le code qui te permet d'aller lire les variables dans ton formulaire, ni le code pour mettre à jour la page. Franchement y'a pas photo, le jour où j'en ai besoin, j'utiliser uniquement Atlas.


Message édité par MagicBuzz le 24-08-2007 à 09:34:44
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed