Kannan Sundarajan har skapat en "Rich Text Editor"-kontroll med ASP.NET AJAX och delat ut den med en MS-PL licens på CodePlex. Läs mer hos Kirti's blog för skärmskott och kolla in ett demo.
Ser ut att vara en någorlunda start. Men att det blir radbryt vid entertryckning istället för paragraf, att den inte stödjer XHTML och att den använder FONT-taggar tycker inte jag är så bra.
Förhoppningsvis utvecklas den fint av communityn så det är nog något att hålla ögonen på.
Har du problem med att förstår hur ASP.NET AJAX postbacks fungerar och i vilken ordning events körs? Läs då Dave Ward när han förklarar hur man undviker några av de vanligast problemen.
Om man kör ASP.NET AJAX på en sajt kan man få javascript-felet 'Sys' is undefined. Detta beror på att IE6 har problem med en komponent för att ladda de komprimerade skripten.
Problemet sägs vara lagat i senare släpp av AJAX-ramverket men jag fick felet nyligen (på Loopias webbhotell). Om detta uppstår kan man helt enkelt stänga av komprimeringen helt som jag läste här. Detta görs genom att lägga till följande i Web.Config.
Uppdatering 10920 av AJAX Control Toolkit släpptes för lite mer än en vecka sen. Har installerat den på ett eget projekt idag och allt verkar fungera bra.
Uppdateringen innehåller inga ändringar som förstör gammal funktionalitet utan bjuder istället på många buggfixar. Man behöver inte modifiera Web.Config på något sätt utan det är bara att byta ut AjaxControlToolkit.dll mot den nyare versionen. Filerna finns att ladda ner på CodePlex.
Delay's blog går in lite djupare och berättar även att man hade planerat att inkludera ett förbättrat ramverk för testning. Man hann dock inte med att få klart det i tid utan beslutade sig för att skjuta på det till framtiden. Något att se fram emot till nästa uppdatering med andra ord.
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); } }
Validerings-funktionerna i .NET har haft en del problem genom versionerna. I en version (har för mig att det var .NET 1.1) fungerade de knappt över huvudtaget. Men i 2.0 hade Microsoft löst de första problemen.
När sen MS Ajax släpptes blev det återigen en del buggar och problem. Det märkte jag häromdan när jag försökte ha validering på en TextBox i en wizard-kontroll som i sin tur låg inom en UpdatePanel. På första steget hade jag en TextBox med validering och där fungerade den fint. På andra steget så låg javascript-funktionerna kvar utanför UpdatePanel, men textboxen hade ju redan försvunnit och då blev det error som såg ut så här:
control has no properties ValidatorGetValue("ctl00_mainContentPH_wizard_tbOrderId")WebResource.axd (line 104) RequiredFieldValidatorEvaluateIsValid(span#ctl00_mainContentPH_wizard_ReqFieldOrderId)WebResource.axd (line 475) ValidatorValidate(span#ctl00_mainContentPH_wizard_ReqFieldOrderId, "", null)WebResource.axd (line 208) Page_ClientValidate("")WebResource.axd (line 128) WebForm_DoPostBackWithOptions(Object)WebResource.axd (line 14) if (typeof(control.value) == "string") {
Microsoft har dock gjort sitt bästa för att lösa även detta problem. Först så rekommenderades att man laddade ner en Validators.dll och mappade upp mot i Web.config.
Genom en kommentar hos Guttrie hittade jag info om en ny hotfix. Enligt erfarenhet när jag patchade ett Windows 2003-system fungerar den väldigt bra och man slipper att gör några ändringar i Web.config.
Om du inte orkar trixa för mycket med det och kan vänta så kommer en Windows Update snart med lösning.
Tabs-kontrollen i Asp.Net Ajax är cool. Men något att tänka på när man använder den är att alla flikar laddas in när den rendereras, även de som är gömda.
Det fick jag själv bittert erfara när jag hade utvecklat en omfattande applikation med Tabs. Den var seg som sirap när jag väl körde den på produktionsservern.
Om man har mycket funktionallitet under varje flik, vore det bättre om denna bara laddades när man klickar på den. Shawn Burke verkar ha en smidig lösning, den artikeln ska jag kolla på nästa gång det är dags för att använda Tabs.
Ofta har Intellisense slutat fungera för mig och mina kollegor och vi har grubblat en del över detta. Nu läste jag just hos ScottGu vad buggen handlar om.
En enkel lösning är att se till att ha MasterPage-filen öppen i VS, då fungerar Intellisense. Alternativt ladda hem Visual Studio® 2005 SP1 där problemet ska vara löst.