Prevenire Il Cambio Di Url Quando Si Usa L'Url Rewriting E Il Postback

Posted by: ollie10 6/29/2009 5:17 PM

In tutti i siti che si rispettino ormai si fa largo uso delle tecniche di url rewriting per ottimizzare l'indicizzazione sui motori di ricerca. In Asp.NET però spesso si verifica un problema con il postback, questo perchè nel form viene conservato l'url leale della pagina e non quello riscritto.

Per ovviare a questo inconveniente ci sono diversi metodi, ma quello più semplice consiste in una sola riga di javascript che resetta l'action del form con quello visualizzato effettivamente nel browser, ecco il codice:

<script type="text/javascript">document.thewebform.action = document.location.href;</script>

Ovviamente bisognerà sostituire theform con il name corretto della propria form

Tags: , ,
Categories: Asp.NET - C#
Permalink | Comments (0)
RSS comment feed

Il Modo Corretto Di Parsare Gli Enum In Asp.NET C#

Posted by: ollie10 6/22/2009 5:02 PM

Per comparare gli enum con le string il metodo corretto è usare Enum.Parse rispetto a comparare le stringhe.

In questo esempio supponiamo di avere una stringa messageId ed un enumerator MessageType:

MessageType messageType = (MessageType)System.Enum.Parse(typeof(MessageType),messageId,true);

L'ultimo argomento dy System.Enum.Parse specifica se il confronto deve essere case sensitive o meno.

Tags: , , ,
Categories: Asp.NET - C#
Permalink | Comments (0)
RSS comment feed

Remix 2009 il web del futuro, finalmente un evento interessante

Posted by: ollie10 6/18/2009 7:30 PM

Remix 2009 MilanoNon sono solito andare a tutti gli eventi di Microsoft & Co. e non sono un superfanatico ma l'imressione che ho avuto dal ridotto numerdo di eventi a cui ho partecipato è che fossero tutti abbastanza scarsi sotto il livello contenuti fino a ieri quando sono andato al Remix 2009 tenutosi al Crowne Plaza Hotel di San Donato Milanese.

L'evento è cominciato molto bene con il Keynote e David Platt che ha cercato di spiegarci come mai il software fa "schifo".

More...
Tags:
Categories: Asp.NET - C# | News | Personale | Sviluppo Web
Permalink | Comments (0)
RSS comment feed

Salvare Immagini In Formato Jpg Con Compressione Variabile

Posted by: ollie10 5/28/2009 3:27 PM

Spesso capita di dover lavorare con delle immagini e di volerle salvare nel formato più comune per il web il jpg, usando i parametri standard dell'oggetto image il risultato però non è ottimale. La funzione Save() ha un paio di interessanti parametri EncoderParameters e ImageCodecInfo che possono venirci in aiuto.

Usando queste semplici funzioni possiamo salvare l'immagine specificando il rapporto di compressione (da 0 a 100) come faremmo con photoshop o qualsiasi altro programma di grafica

 

Image image = Bitmap.FromFile("C:\\immagine.jpg");
// SALVO L'IMMAGINE CON UN RAPPORTO DI COMPRESSIONE DEL 75%
SaveJPG(image, "C:\\output.jpg", 75);


private ImageCodecInfo GetEncoderInfo(String mimeType)
{
	int j;
	ImageCodecInfo[] encoders;
	encoders = ImageCodecInfo.GetImageEncoders();
	for (j = 0; j < encoders.Length; ++j)
	{
		if (encoders[j].MimeType == mimeType)
		return encoders[j];
	}
	return null;
}

public static void SaveJPG(Image image, string fileName, long compression)
{
	EncoderParameters eps = new EncoderParameters(1);
	eps.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, compression);
	ImageCodecInfo ici = GetEncoderInfo("image/jpeg");
	image.Save(fileName, ici, eps);
}
Tags: ,
Categories: Asp.NET - C#
Permalink | Comments (0)
RSS comment feed

Rilasciato "Fennec" Firefox Per Windows Mobile 6

Posted by: ollie10 5/18/2009 1:00 PM

Proseguono a ritmo serrato i lavori di sviluppo di Firefox Mobile, meglio noto con il nome in codice Fennec.

Pochissime ore fa Firefox Mobile "Fennec" è stato rilasciato in versione 1.0 beta 1 per Maemo (Internet Tablet Nokia 770, Nokia N800 e Nokia N810), mentre all'inizio del weekend era stata rilasciato Fennec in versione Alpha 1 per Windows Mobile 6, ancora una volta indirizzato ai dispositivi dotati di schermo touchscreen.

Il nuovo rilascio è importante in quanto rende disponibile la prima alpha ufficiale per Windows Mobile 6 Professional di quello che sarà il porting di Mozilla Firefox per dispositivi mobili, ancora una volta testato su HTC Touch Pro, anche se in futuro sarà aggiunto il supporto per altri modelli di smartphone basati su Windows Mobile.

Molte le novità introdotte da questa nuova versione:
 

More...
Tags:
Categories: Windows Mobile
Permalink | Comments (0)
RSS comment feed

Upgrade blog e gallery aggiornata!

Posted by: ollie10 5/13/2009 6:08 PM

Oggi finalmente dopo un porting lungo e abbastanza faticoso sono riuscito ad aggiornare il blog all'ultima versione di blogengine la 1.5.0.7. Dato che c'ero ne ho approfittato anche per dare una rinfrescata alla grafica anche perchè purtroppo quella precedente non supportava a pieno tutte le nuove features come i widget. Praticamente tutti i post sono stati validati xhtml transitional ed ho apportato piccoli miglioramenti prestazionali.

La lista delle features è disponibile qui http://www.dotnetblogengine.net/page/features.aspx

Questi giorni ho provveduto anche ad aggiornare la gallery all'ultima versione di imagevuex, il software usato pergestire le foto, anche qui sono disponibili tante migliorie, ho aggiunto tra l'altro anche le foto che da un pò non pubblicavo.

A presto

Tags:
Categories: Asp.NET - C# | BlogEngine.NET | Personale
Permalink | Comments (0)
RSS comment feed

Realizzare Un RequiredFieldValidator Per Le Checkbox

Posted by: ollie10 4/30/2009 10:45 AM

Se si vuole obbligare la selezione di una checkbox (tipicamente quella per la verifica della privacy) non è possibile utilizzare il controllo RequiredFieldValidator. La soluzione è semplice utilizzando il flessibile controllo CustomValidator.

Pagina aspx:

<asp:CheckBox ID="chkPrivacy" Runat="server" />
<asp:CustomValidator ClientValidationFunction="RequiredPrivacy" Runat="server" ID="CustomValidatorchkPrivacy" />

 

Validazione lato server:

La validazione si riduce semplicemente alla verifica della proprietà Checked del controllo CheckBox

private void CustomValidatorchkPrivacy_ServerValidate(object source, ServerValidateEventArgs args)
{
	args.IsValid = true;
	if(chkPrivacy.Checked == false)
		args.IsValid = false;
}

 

Validazione lato client:

La validazione lato client (facoltativa) si effettua impostando la proprietà ClientValidationFunction del controllo CustomValidator

<script language="javascript">
	function RequiredPrivacy(oSrc, args){
		if (document.all["<%=chkPrivacy.ClientID%>"].checked == false){
			alert("Devi acconsentire al trattamento dei dati personali");
			args.IsValid = false;
		}
	}
</script>

Si noti lo script server chkPrivacy.ClientID necessario per passare il corretto ID del controllo a runtime al codice Javascript.

Tags: ,
Categories: Asp.NET - C# | Sviluppo Web
Permalink | Comments (0)
RSS comment feed

Url Rewriting con Asp.NET su IIS 5, 6, 7 senza dolori

Posted by: ollie10 4/5/2009 7:10 PM

COS'È L'URL REWRITING E QUALI SONO LE SOLUZIONI POSSIBILI
Lo scopo della riscrittura degli URL e le possibilità integrate da ASP .Net 2.0

Per URL rewriting si intende una forma di redirect di una richiesta ricevuta dal server verso un nuovo URL in maniera invisibile all'utente, ovvero senza mandare responsi contenti redirect JavaScript, HTTP (responsi 300 e successivi), o tramite META ma bensì restituendo direttamente il contenuto della pagina di destinazione. Questa tecnica è molto utile per vari aspetti. L'ipotesi più semplice è quella di voler associare ad una stessa risorsa più percorsi, ad esempio ad un'immagine che si trova fisicamente in /immagini/miaImmagine.JPG potrebbe risultare necessario associare anche il percorso /altraLingua/immagini/miaImmagine.JPG evitando un redirect al browser e rendendo il tutto più pulito (anche agli occhi dei motori di ricerca). Un'altra esigenza potrebbe essere invece quella di interpretare richieste a risorse che non hanno una vera e propria corrispondenza con un file come accade ad esempio per una discussione di un FORUM; in sostanza tramite l'URL rewriting è possibile associare ad una richiesta del tipo /forum/Titolo-della-discussione-1234.htm la pagina /forum/Discussione.aspx?id=1234. Anche in questo caso si tratta di una miglioria rivolta ai motori di ricerca che danno una certa importanza ai nomi delle risorse e in taluni casi apprezzano maggiormente le pagine (almeno apparentemente) statiche (quindi con estensione HTML e privi di parametri).
More...

Tags: , ,
Categories: Asp.NET - C#
Permalink | Comments (0)
RSS comment feed

Un RSS Reader Con Asp.NET C#

Posted by: ollie10 3/30/2009 10:08 PM

Questo script mostra come effettuare il parsing di un docuemnto RSS mediante codice ASP.Net e C#.

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Configuration;
using System.Web.Security;
using System.Net;
using System.IO;
using System.Xml;


public partial class _Default : System.Web.UI.Page 
{
    

    protected void Page_Load(object sender, EventArgs e)
    {
        // This tutorial is provided in part by Server Intellect Web Hosting Solutions http://www.serverintellect.com

        // Visit http://www.AspNetTutorials.com for more ASP.NET Tutorials
        string rssURL = "http://www.codeguru.com/icom_includes/feeds/codeguru/rss-all.xml";
        Response.Write("<font size=5><b>Site: " + rssURL + "</b></font><Br />");
        ProcessRSSItem(rssURL);
        Response.Write("<hr />");

        rssURL = "http://www.developer.com/icom_includes/feeds/special/dev-5.xml";
        Response.Write("<font size=5><b>Site: " + rssURL + "</b></font><Br />");
        ProcessRSSItem(rssURL); 

    }

  public void ProcessRSSItem(string rssURL) 
  { 
   WebRequest myRequest = WebRequest.Create(rssURL); 
   WebResponse myResponse = myRequest.GetResponse(); 
   
   Stream rssStream = myResponse.GetResponseStream(); 
   XmlDocument rssDoc = new XmlDocument(); 
   rssDoc.Load(rssStream); 
   
   XmlNodeList rssItems = rssDoc.SelectNodes("rss/channel/item"); 
   
   string title = ""; 
   string link = ""; 
   string description = ""; 
   
   for (int i = 0; i <rssItems.Count; i++) 
   { 
    XmlNode rssDetail; 
   
    rssDetail = rssItems.Item(i).SelectSingleNode("title"); 
    if (rssDetail != null) 
    { 
     title = rssDetail.InnerText; 
    } 
    else 
    { 
     title = ""; 
    } 
   
    rssDetail = rssItems.Item(i).SelectSingleNode("link"); 
    if (rssDetail != null) 
    { 
     link = rssDetail.InnerText; 
    } 
    else 
    { 
     link = ""; 
    } 
   
    rssDetail = rssItems.Item(i).SelectSingleNode("description"); 
    if (rssDetail != null) 
    { 
     description = rssDetail.InnerText; 
    } 
    else 
    { 
     description = ""; 
    } 
   
    Response.Write("<p><b><a href='" + link + "' target='new'>" + title + "</a></b><br/>"); 
    Response.Write(description + "</p>"); 
   } 
  } 

}
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>A simple RSS reader using ASP.NET 2.0 and C#</title>
<style type="text/css">
<!--
body {
	margin-left: 0px;
	margin-top: 0px;
	margin-right: 0px;
	margin-bottom: 0px;
}
a:link {
	color: #0000FF;
}
a:visited {
	color: #0000FF;
}
a:hover {
	color: #0000FF;
	text-decoration: none;
}
a:active {
	color: #0000FF;
	}
.basix {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 11px;
}
.header1 {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 11px;
	font-weight: bold;
	color: #006699;
}
.lgHeader1 {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 18px;
	font-weight: bold;
	color: #0066CC;
	background-color: #CEE9FF;
}
-->
</style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <br />
        <table align="center" border="0" cellpadding="0" cellspacing="0" style="position: static"
            width="752">
            <tr bgcolor="#5482fc">
                <td colspan="4">
                    <img height="1" src="/media/spacer.gif" width="1" /></td>
            </tr>
            <tr>
                <td bgcolor="#5482fc" width="1">
                    <img alt="Server Intellect" height="1" src="media/spacer.gif" width="1" /></td>
                <td width="250">
                    <a href="http://www.serverintellect.com">
                        <img alt="Server Intellect" border="0" height="75" src="media/logo.gif" width="250" /></a></td>
                <td bgcolor="#3399ff" width="500">
                    <a href="http://www.serverintellect.com">
                        <img alt="Server Intellect" border="0" height="75" src="media/headerR1.gif" width="500" /></a></td>
                <td bgcolor="#5482fc" width="1">
                    <img alt="Server Intellect" height="1" src="media/spacer.gif" width="1" /></td>
            </tr>
            <tr bgcolor="#5482fc">
                <td colspan="4">
                    <img height="1" src="media/spacer.gif" width="1" /></td>
            </tr>
        </table>
        <div>
            <br />
            <table align="center" bgcolor="#5482fc" border="0" cellpadding="5" cellspacing="1"
                style="position: static" width="600">
                <tr>
                    <td align="center" class="lgHeader1" height="50">
                        A simple RSS reader using ASP.NET 2.0 and C#</td>
                </tr>
            </table>
            <br />
    
        </div>
    </div>
    </form>
</body>
</html>
Tags: , ,
Categories: Asp.NET - C#
Permalink | Comments (0)
RSS comment feed

Exposure Fusion? Un' Altra Tecnica Per Migliorare Le Nostre Foto

Posted by: ollie10 3/20/2009 12:55 PM

exposure-fusionExposure Fusion è una tecnica che partendo da una serie di foto ne produce una nuova prendendo le parti correttamente esposte.
A prima vista potrebbe sembrare una specie di hdr, ma non ha bisogno di creare un’immagine intermedia e di effettuare il tone mapping. L’algoritmo seleziona i pixel delle varie immagini in base a saturazione, contrasto e luminosità.

Rispetto alle foto hdr questo genere di foto è molto più rapida da generare ed ha meno problemi con gli aloni attorno agli oggetti tipici delle foto hdr. Soprattutto quest’ultimo punto consente di avere foto più reali e naturali.
Questa tecnica consente anche di estendere la profondità di campo via software fondendo foto con una profondità di campo ridotta. Una possibilità da sfruttare quando non è possibile scattare la foto con la profondità di campo completa in un’unica foto.

Il programma più utilizzato per ora è Enfuse ed è disponibile un’interfaccia che si chiama EnfuseGui. Se usate Lightroom è disponibile un plugin.

Tags: ,
Categories: Fotografia
Permalink | Comments (0)
RSS comment feed