Julafton kom tidigt för oss .NET-utvecklare i år. Microsoft höll tidschemat och levererade VS 2008 med .NET 3.5 Beta 2.
Men helt smärtfritt var det inte att få igång det för mig. Eftersom jag hade läst att denna version skulle fungerar bra vid sidan om VS 2005 satte jag igång installationen. Denna avbröts dock mitt i pga något fel, och lämnade mig med VS 2005 och hela min utvecklingsmiljö kaputt. Det beror nog på att jag redan hade en del fel på mina installationer, men en liten varning alltså. Installera den inte på din produktionsmijö om du vill slippa problem.
En ominstallation av XP senare, så gick det mycket bättre och nu rullar det fint på min maskin. Än har jag bara känt på det nya utvecklingpaketet, men bara en sån sak som Intellisense på Javascript har gjort det mödan värt.
VS 2008 med ASP.NET AJAX 1.0
Något som är lite lurigt är att få Ajax att fungera i NET2.0 läget på VS 2008. Först måste man se till att köra ett skript för att inte VS 2008 automatiskt ska använda de nya inbyggda Ajax-referenserna.
Sedan är det några fler steg som måste genomföras för att få fram Ajax-kontrollerna i toolboxen och ladda in referenserna. Microsofts utvecklingsteam har gjort en grundläggande förklaring för hur man gör.
Nu är det dags för oss att börja att brottas ordentligt med SQL Server 2005, och vi håller på att flytta en del databaser från 2000.
Något som kan ställa till med problem är att de gamla användarna följer med när man importerar databaserna. Vi har tidigare visat hur man kan ändra ägare på tabeller. Enligt min erfarenhet är det bäst att alltid köra med 'dbo' som ägare.
Vid import kan det bli en del konstigheter som resulterar att man inte kan ändra rättigheter alls en användare, och man får följande felmeddelande.
User, group, or role already exists in the current database. (Microsoft SQL Server, Error: 15023)
Detta beror på att Security identification numbers (SID) förväxlade eller 'föräldrarlösa' i sysusers-tabellen, som Falafel Software förklarar.
För att se en lista på övergivna inloggningar kan man göra följade stored procedure:
Se hur adsend annonserna ser ut på din webbplats utan att de registreras som omladdningar hos Google. I det extra fönstret som öppnas kan man även klicka på dem utan att riskera att åka dit för klickfusk.
Slutligen vill jag även passa på att tipsa om MozBackup även om det inte är ett tillägg utan ett separat program. Med detta man kan ta backup på sinda profiler i Firefox och Thunderbird.
Grub är ett projekt för att indexera internet med hjälp av distributerade klienter, i form av en skärmsläckare. Kommer ihåg när jag körde det för några år sen och hade en del skoj med det. Det var riktigt trist när det stängdes ner år 2005 pågrund av en kontrovers med källkoden, då i Looksmart's ägo.
Nu har dock Wikia köpt projektet och planerar att starta upp det igen, och använda datan till att köra deras sökmotor. De ska också släppa det som öppen källkod om jag förstått det rätt. Mer info kommer på deras Grub Wiki.
Jag har inte provat på Facebook ännu, den sociala plattformen som för tillfället växer med 100 000 medlemmar per dag, och som även svenskarna börjar joina som galningar. Så en dag får jag väl kolla in vad all hype handlar om.
Intressant är i alla fall att de har ett öppet API som utvecklare kan göra egna insticknings-program genom. Företag som Drömbolaget satsar nu på att göra applikationer till denna plattform.
Vill man prova på detta med ASP.NET så har Nikhil Kothhari gjort ett öppen källkods-projekt som kallas Facebook.net.
Jag har som sagt aldrig loggat in på Facebook utan bara vart vid fronten och vänt. Något som är intressant med detta faktum är att ingen data kommer ut från Facebook (precis som med många andra sociala nätverk) är att man inte kan se några andra profiler utan att själv bli medlem.
Facebook är precis som ett svart hål som Web-stategy skriver i inlägget "All your widgets are belong to Facebook". Det finns mängder av sätt att få in data men det kommer inte ut någonting, de har inte ens RSS-flöden har jag hört. Vågar man gå in där?
Om dessa kontroller är cachade så blir det lite svårare. Speciellt om man ska kunna sätta några properties på dem. Via OdeToCode hittade jag info hos Microsoft om hur man kan göra, och även exempelkod.
// Load the user control Control control = LoadControl("control/MyControl.ascx"); placeHolder.Controls.Add(control);
// Set its properties (if possible) ASP.MyControl uc = control as ASP.MyControl; if (uc == null) { PartialCachingControl pcc = control as PartialCachingControl; if (pcc != null) uc = pcc.CachedControl as ASP.MyControl; } if (uc != null) uc.MyProperty = "This is the value";
Ps. I mitt exempel har jag med ASP-prefixet på klassen för kontrollen. Detta beror på att jag använder inline-code, läs mer om detta i tidigare nämnt inlägg.
Något jag inte tänkt på innan är att man inte kan sätta värde-variabler till null i C#. Gjorde ett försök och fick då felet:
int x = null; Cannot convert null to 'int' because it is a value type
När jag läst detta inlägget, fick jag lite bättre förståelse till hur det fungerar, och även hur man kan göra för att använda null även på värdetyper, så här:
int? x = null;
Användbart om man jobbar med en databas och man vill att sina variabler ska reflektera de null-värden som finns där.
TinyMCE är en skön HTML-Editor som har blivit väldigt populär. Den är oftast väldigt enkel att använda och har många konfigureringsmöjligheter.
Men att använda den tillsammans med Ajax och partial update är verkligen ingen lätt match. Jag lyckades tidigare i år, efter stor möda, men det var nog mest tur.
Skrev om det i bloggen, men den postningen blev inte så fullständig eller bra. Det var mest lite egna minnesanteckningar som jag fick till där. Jocke var inne och kollade på beskrivningen men fick inte till det. Så nu tänkte jag visa precis hur man kan göra med ett uppdaterad och fullständig kod.
Problemen
Problem 1. TinyMCE gör om textboxar till en Iframe, som My Portal Project förklarar. Detta leder till att det är svårt att ta emot värden (speciellt i Firefox). Waqas_badas visar hur man kan komma runt detta genom ett javascript på submit-knappen.
Problem 2. Vid Ajax-anrop ritas inte editorn upp igen. Här kan man anropa mceAddControl-kommandot, men det gäller att resetta id-räknaren innan man gör det, här är en som kommit på hur man gör.
Kodexempel
Nu tänkte jag låta koden förklara resten. Missa inte att ladda hem zip-filen längst ner som innehåller ett färdigt project som fungerar i IE7, FF2 och Opera.
Default.aspx
<%@ Page Language="C#" ValidateRequest="false" Trace="false" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>MS Ajax UpdatePanel - TinyMCE</title> <script type="text/javascript"> function SaveMyPreciousValues() { tinyMCE.triggerSave(false,true); TextBox1 = document.getElementById('TextBox1'); alert('Check value when posting: '+ TextBox1.value) } </script> </head> <body>
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if(!Page.IsPostBack) LoadTinyMCE(); }
private void LoadTinyMCE() {
//Load tinyMCE HtmlGenericControl Include = new HtmlGenericControl("script"); Include.Attributes.Add("type", "text/javascript"); Include.Attributes.Add("src", "js/tiny_mce/tiny_mce.js"); this.Page.Header.Controls.Add(Include);
Label1.Text = "Content posted from TextBox1: " + inputText;
//Register some javascript to redraw the editor. //Very important to reset the id-counter to "0", or else strange things will happen.. ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "init", "tinyMCE.idCounter=0;tinyMCE.execCommand('mceAddControl', false, 'TextBox1');", true); } }