Controlli .NET in pagina HTML

martedì 26 dicembre 2006 - 10.27

luigifonti Profilo | Newbie

Ho provato più volte a creare un controllo .NET in C# con Visual studio 2005.
Ho creato un nuovo progetto UClib di tipo Control Library, e
ho generato il controllo più semplice possibile, con solo una casella di testo, e una proprietà pubblica (Testone) che permette di impostarne il testo.

Il sorgente è così:
----------------------------------------------------------
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;

namespace UClib
{
public class UCont : UserControl
{
public Texter()
{
InitializeComponent();
}

public String Testone
{
get { return testo; }
set
{
testo = value;
// oltre a settare la proprietà, imposta anche il testo della casella
textBox1.Text = value;
}
}

private String testo;

private System.ComponentModel.Container components = null;

#region Component Designer generated code

private System.Windows.Forms.TextBox textBox1;
}
}
----------------------------------------------------------

Questo controllo funziona bene se inserito in un form di una applicazione .NET
Se invece tento di usarlo in una pagina HTML non funziona !
Ad esempio ho creato questo file test.htm nella directory wwwroot di Internet Information Server:
----------------------------------------------------------
<html>
<body color=white>
<OBJECT id="texter" name="texter" classid="UClib.dll#UClib.UCont"
width=300 height=140>
</OBJECT>
<hr>
<form name="frm" id="frm">
<input type=button value="Azione" onClick="doScript();">
</form>
</body>

<script language="JavaScript">
function doScript()
{
texter.Testone = "Ciao a tutti";
}
</script>
</html>
----------------------------------------------------------
Ho pure copiato nella stessa directory il file UClib.dll creato con il progetto,
e poi ho aperto la pagina con Internet Explorer:

http://localhost/test.htm

La pagina viene visualizzata correttamente, con il controllo e la sua casella di testo, e il bottone "Azione".

Però cliccando su azione, il testo "Ciao a tutti" non viene visualizzato.
L'unico, stranissimo risultato, è che la casella di testo diventa un po' più alta.

C'è qualcuno che ha fatto qualche controllo con C#.NET o VB.NET e che funzioni nelle pagine HTML sotto IIS ?
Grazie
Luigi Fonti

freeteo Profilo | Guru

ciao,
" un controllo C#.NET o VB.NET e che funzioni nelle pagine HTML " non esiste .
Il punto è che c# come .net insomma tutti i linguaggi .net sono eseguiti dal runtime, quindi compilati ed eseguiti utilizzando le classi base del framework, e questo per qualsiasi controllo sia, win32 o Web.
Quando un controllo viene utilizzato, se si tratta di Win32 l'aspetto viene dato da windows (a pixel e conforme alle specifiche di windows nel gestire gli oggetti grafici), mentre per i controlli web pero', invece di avere un'interfaccia standard a pixel, deve generare il codice html in modo che il browser visualizzi l'aspetto corretto.
Quindi, per capirsi, per quello win32 lo gestisce windows diretto, quello Html sara' il tuo browser che lo renderizzera', e lui non sa se è html statico o dinamicamente creato d codice.

Percio' per fare controlli web in un qualsiasi linguaggio .net deve essere in esecuzione iis con l'asp WorkProcess che si incarica di usare .net per renderizzare i controlli lato server.
Per come è costruito il framework, il workprocess deve aspettarsi una parte server contenitore (Form appunto) il quale contiene tag lato server, se la pagina è Html pura (tipo potresti crearla con Notepad) non viene chiamato il workprocess ad elaborarlo, quindi di fatto il codice che scrivi viene dato in pasto al browser direttamente, senza essere elaborato (e quindi appunto non funziona come dovrebbe).

Percio', devi usare una pagina asp, importare il controllo lato server, e vedrai che tutto funziona normalmente, non ci sono alternative.
L'unica cosa che puoi fare senza avere un Form, è usare i tag asp.net "<%" dentro alla pagina, un po in stile "asp classic" ma sinceramente non credo sia possibile tirare dentro il controllo anche in quei tag, io di solito uso il form.
Se la cosa proprio non ti va, pensa a fare qualcosa tramite javascript,non hai alternative, ma a quel punto nn ti interessa piu' del framework .net, sei su HTML e JS, quindi stai "parlando" direttamente con il Browser...
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5