Archive for '.NET'

Strip tags from a string

It is often useful to have a way to strip html or other tags from a string. Php has the strip_tags function. Stripping tags could be done in .NET with the following code that returns the stripped string:

public static string StripTags(string str)
{
return Regex.Replace(str, @”<(.|\n)*?>”, string.Empty);
}

Submitta asp.NET formulär med enter-knappen

En klassisk bugg i asp.NET (1.1 åtminstone) är att formulär med endast en textruta och en submit-knapp inte submittas då man fyller i rutan och trycker på enter-tangenten. Eller jo, sidan submittas men eventet för submit-knappen körs inte. Lösningen är enkel, men väldigt svår då man inte vet om att det är en bugg. Det räcker med att man skapar en osynlig textruta (input). En mer utförlig förklaring till fenomenet finns här.

Exempel:

<input type=”text” style=”display:none”/>

Display ASP.NET 1.x system information

It is always good to know and master the environment you work in.  Usually you need to keep track of the current ”request headers”, ”environment variables”, ”server variables” and ”session variables. In php you could use the phpinfo()  function to check your installation. However, I do not know about any equivalent in .NET.

On this page you can find an application that give you some of these variables. But I wanted a C# version which displays some more information as well. Therefore I made my own small version. Unfortunately I have no online .NET server and can’t provide a demo (help someone?) 

You can download the application source code here: aspnetinfo.zip

Feel free to customize the application for your need. If you make a superior version, then put it on the web and tell me about it.

Enkelt sätt att undvika spam från webbformulär

Jag har på ett flertal sajter haft problem med att spam-robotar letar upp ”oskyddade” formulär och fyller i dessa med en massa junk som sedan submittas. En lösning på problemet skulle vara att använda någon slags Captcha som är ett slags turing-test som avgör om användaren är människa eller spam-bot. Men detta känns som lite väl mycket overkill för mina sajter.

En lösning som jag använt mig av är att användaren får en input box där de måste fylla i årets år, ex: 2007, för att få gå vidare. Den lösningen har fungerat bra och innebär inte särskilt mycket kod för mig som utvecklare. Men det innebär ett extra steg för användaren som kan upplevas som jobbig eller onödig. Så jag undersökte om det finns ett alternativ som innebär lite kod samt att användaren slipper mata in ytterligare uppgifter.

Den enkla lösningen är att lägga in en extra textarea-kontroll i formuläret som inte visas för användaren genom CSS. Självklart så kan inte spam-roboten hålla sig ifrån att fylla även denna med junk eftersom dom vanligtvis inte förstår sig på CSS. När formuläret sedan valideras på server-sidan så kontrollerar man om fältet är ifyllt eller inte. Om det är ifyllt så är det en spam-robot på sidan och annars är det en människa. 

I formuläret:

<textarea name=”to_adress” style=”display: none;”></textarea>

I formulär-kontrollen

if($_REQUEST["to_adress"] == ””)
{
// Människa
} else if($_REQUEST["to_adress"] != ””)
{
// Robot
}

Detta är en fast-and-dirty lösning och se det som en sådan. Använd Captcha eller något mer avancerat om du vill ha en mer avancerad kontroll. Men till enkla low-profile formulär så funkar detta alldeles ypperligt.

Samma lösning i .NET bör fungera enligt följande:

I formuläret:

<textarea runat=”server” id=”to_adress” name=”to_adress” style=”display: none;”></textarea>

eller

<style type=”text/css”>    .gommig {display: none;}</style>
<textbox Runat=”server” CssClass=”gommig” TextMode=”MultiLine” id=”to_adress2″></textbox>

I formulär-kontrollen;

   // Alt textarea
   if( to_adress.Value == ”” )
   {
    // Människa
   }
   else
   {
    // Robot
   }

 // Alt textbox
   if( to_adress2.Text == ”” )
   {
    // Människa
   }
   else
   {
    // Robot
   }

DateTime till yyyy-MM-dd

En användbar kodsnutt för att få dagens datum på formatet yyyy-MM-dd (ex 2007-04-27):

string dagensDatum = DateTime.Now.ToString(”yyyy-MM-dd”);

Det går givetvis att använda det på vilket DateTime som helst:

DateTime datum = new DateTime(2007,4,27);
string nagatDatum = datum.ToString(”yyyy-MM-dd”);

För att veta vilka fler formateringar som går att göra så kan man läsa mer på DateTime.ToString Method (String) på MSDN.

Sharepoint introduktionskurs

SharepointJag har varit på 3-dagars kurs i Stockholm under veckan och lärt mig vad Micrsosoft Sharepoint är för något. Göran Husman (Sharepoint MVP) från företaget Humandata var vår lärare och kursupplägget kändes helt okey.  Jag ska även gå fortsättningskursen där man får utveckla så det blir några till besök i huvudstaden under våren.

Produkten SharePoint, som jag inte haft någon tidigare kunskap om, visade sig vara ett grymt stort och komplext system för webbpublicering, dokumenhantering, collaboration etc.  Den stora fördelen med detta system kommer att vara integrationen med övriga MS produkter som Exchange och Office-paketet.  Men då krävs det att användarna har de senaste versiorna med Sharepoint funktionalitet inbyggd. För att få ut något av en SharePoint installation så bör stora delar av företagets miljö vara byggt runt MS-produkter.

Jag kan se fördelarna om man har en stor organisation där man har en homogen MS-miljö men för mer nischade ”webbområden” som webbpublicering så ser jag detta som alltför krångligt och resurskrävande i form av administration och konfiguration. Dessutom så kostar det ju multum om man inte använder sig av de nedskalade versionerna.

Här finns mer information om kursen på informators hemsida

o_testsitehomepage.JPG

Focus till komponent vid postback utan SmartNavigation

Ett problem med web forms är att dom tappar focus då man gör en postback. Man kan däremot använda SmartNavigation för att lösa detta, men det finns situationer då detta inte fungerar tillfredställande. Då kan man använda sig av denna kodsnutt som sätter focus på den komponent som orsakade postbacken.

Lägg in i din Page_Load:

if(Page.IsPostBack)
{
SetFocusPostBackControl(this);
}

Samt lägg till metoden:

///
/// Sätter fokus vid postback på den kontroll som hade focus
///
///
public void SetFocusPostBackControl(System.Web.UI.Page webPage)
{
string[] ctlPostBack;

ctlPostBack = webPage.Page.Request.Form.GetValues(”__EVENTTARGET”);
if (ctlPostBack != null && ctlPostBack.Length > 0)
{
string ctlUniqueId;
ctlUniqueId = ctlPostBack[0];
System.Web.UI.Control findControl = webPage.Page.FindControl(ctlUniqueId);
if ((findControl != null) &&
(findControl is DropDownList ||
findControl is TextBox ||
findControl is RadioButton ||
findControl is RadioButtonList))
{
string ctlClientId;
ctlClientId = findControl.ClientID;
string jScript;
jScript = ””;;

webPage.Page.RegisterStartupScript(”focus”,jScript );

}
}
}