Bueno, me hubiera gustado terminar el día 6, pero han llegado los sanfermines y me ha pillado el toro. En fin. Veamos como se crea una página web con ASP.NET y C#. Por un lado se usan etiquetas especiales para los "componentes HTML" como las cajas de texto, botónes y etiquetas. Por otro se puede meter código C# dentro de etiquetas script, pero se ejecutan en el servidor claro. Y también se puede asociar una clase C# a la página, pero eso se escapa de esta introdución. Veamos un ejemplo tipo hello World.

<%@ Page Language="C#" %>
<html>
<head>
<script runat="server">

 // Este código de C# se ejecuta en el servidor,
 // es como si lo metieramos entre <% %>
 protected void btnBoton_Pulsa(object Origen, EventArgs e)
 {
 	// Establecemos la etiqueta de saludo
 	lblSaludo.Text="nano dice: hola nena!";

	// Establecemos el título de página
	lblTitulo.Text = "Ejemplo de ASP.NET";

 }

</script>

<title><asp:Label id="lblTitulo" runat="server" /></title>
</head>
<body>

<h1>El hello World del ASP.NET</h1>

<form runat=server>
<asp:Button id="btnBoton" runat="server" Text="Pulsa este botón" onclick="btnBoton_Pulsa" />
Venga, pincha y muestrame el saludo
<br>

<br>
<asp:Label id="lblSaludo" runat="server" />
</form>
</body>
</hmtl>
Merece la pena ver como .NET ha transformado esa página en una página web en el lado cliente, echale un ojo en el navegador. Y otro ejemplo algo más complejo.
<%@ Page Language="C#" %>
<html>
<head>
<script runat="server">

 // Vamos a comprobar que se han introducido datos y que los dos passwords
 // son idénticos
 protected void btnBotonComprueba_Pulsa(object Origen, EventArgs e)
 {

 		lblErrores.Text = "";

		// Recoge los datos de formulario
		// Para estas validacion ya existen unas clases específicas
		// pero lo haremos a pelo
		if (txtLogin.Text == "")
		{
			lblErrores.Text = "Escribe algo en el login";
			return;
		}

		if (txtPassword.Text == "" || txtPassword2.Text == "")
		{
			lblErrores.Text = "No dejes los campos password en vacío";
			return;
		}

		if (txtPassword.Text == txtPassword2.Text)
		{
			lblErrores.Text = "Ok, campos llenos y los password coinciden";
		}
		else
		{
			lblErrores.Text = "Error, los campos password NO coinciden";
			return;
		}

		lblErrores.Text += "<br>Tu login es: <b>" + txtLogin.Text + "</b>";
 }

</script>

</head>
<body>

<h1>Formulario de ASP.NET</h1>

<form runat=server>
<table>
<tr>
<td>Login</td>
<td><asp:TextBox id="txtLogin" runat="server" Text="" /></td>
</tr>
<tr>
<td>Password</td>
<td><asp:TextBox id="txtPassword"  TextMode="Password" runat="server" Text="" /></td>
</tr>
<tr>
<td>Repite Password</td>

<td><asp:TextBox id="txtPassword2" TextMode="Password" runat="server" Text="" /></td>
</tr>
<tr>
<td colspan="2">
<asp:Button id="btnBotonComprueba" runat="server" Text="Comprueba datos" onclick="btnBotonComprueba_Pulsa" />
</td>
</tr>
</table>
Venga, pincha y muestrame el saludo
<br>
<br>
<asp:Label id="lblErrores" runat="server" />
</form>
</body>
</hmtl>