Archive for the 'asp.net' Category
Did you know that surveymonkey.com is written in asp.net?
Just found that out recently. I had to purchase a subscription for my wife and couldn’t help but notice how nice the site looked. The workflow is very well designed and is joy to use. Opened up the source and - “say hello to my little friend” - __VIEWSTATE.
Also found this white paper on surverymonkey.com from Microsoft - Customer Solution Case Study.
No commentshttp://dotnetblogengine.net/
http://dotnetblogengine.net - is a great starter kit from Microsoft. It is a full featured blog engine written in ASP.NET.
It is very interesting to see how things are implemented. Xml based membership and role providers. Http modules for compression and url rewriting. Cool stuff.
3 commentsWhere are all the cool startups that run on ASP.NET?
I have been a proud user of .NET framework for 6 years now and I still think it is a really awesome product and Microsoft did a wonderful job developing it.
WinForms is the best way to develop Windows application (with occasional jump into Interop for extra APIs); ASP.NET is enjoyable way to develop web applications and WCF is just pure honey. If all this makes me sound like Micro$oft fanboy, that’s because I am. .NET is really awesome and Visual Studio is the best way to do any kind of development. Especially with Resharper installed. I don’t know how JetBrains did it, but somehow they sold their souls to Satan and in return they can unleash the dark magic of Ctrl+Alt+Space.
But what puzzles me is that not too many people use ASP.NET to create cool products. Sure there are Community Server, MySpace, DotNetKicks and DasBlog; there are all very fine products, but compare them to LAMP, Rails and Java lineup: Digg, Yahoo, LinkedIn, Flickr, Backpack and the Company, Delicious, all the Google Apps, Mint, Meebo, Twitter, Zillow and of course Infinite Cat Project. If you checkout the new startups on TechCrunch, it seems like every new startup is something Linux based and is not ASP.NET.
And I really want to know why. If you are a new startup, you have only one shot at it, so you really want to use the best tools available. And it seems like everybody picks anything but ASP.NET, unless you are doing corporate development.
Why are there so few startups that use ASP.NET? Is it the cost of tools? Hosting cost? Restrictive licensing? Or maybe ASP.NET became “the van” of web development. Safe, bulky and definitely not sexy.
I am sure that I have missed some really awesome ASP.NET projects, so please post the links in comments. Any thoughtful feedback is welcome. All flaming and FUD will be moderated.
43 commentsSafari + AutoComplete Extender + ModalPopup = What the hell?
If you have a bunch of AutoComplete extenders that are wrapped inside of ModalPopup and you try to run it in Safari, chances are, you will not like what you see. The autocomplete div will be shown under the modalpopup. Works fine in Firefox and IE, but Safari is screwed up. What gives?
Well, if you look into source code of AutoComplete extender, you will notice that they have a special handling for Safari (also known as a one-button mouse of the browsers
Just kidding!). Because of this special handling, the correct z-index is not being set on the autocomplete div.
But how can I fix it? Well, all you need to do is to add a div somewhere near the extender with id of “AutoCompleteDiv” and in your extender set the property of CompletionListElementID to “AutoCompleteDiv”.
Here is how I found this info:
- http://logbook.trioro.com/2006/12/ajaxnet-autocompleteextender.html
- http://tim.mackey.ie/ProblemsWithTheAJAXAutoCompleteExtenderArrgh.aspx
Also, there is a custom autocomplete extender based on prototype and script.ac.ulous. I have not tried but it looks really interesting. I would like to take a look the source when I have a bit more time. Here is the link.
No commentsASP.NET AJAX - brilliant or extremely difficult to understand
I just started using ASP.NET AJAX extensively in my work and I am not sure what to make of it. The whole asp.net ajax is pretty complicated once you get away from basic UpdatePanel scenarios. But finally there is a book about it. As always, my hero Dino Esposito came through and wrote a book, so the rest of us can learn how to use it. Book’s name - Introducing Microsoft ASP.NET AJAX.
I got mine from Amazon because bookstores in the hood didn’t have it and I just could not wait anymore. I have been waiting for APRESS’s Foundations of ASP.NET AJAX but it has been delayed so many times that I gave up on that book.
I am 2/3 through the book and so far I like it. It cleared up a lot of misconceptions that I had about asp.net ajax and actually explained in full detail the magic behind UpdatePanel.
I have a pretty good understanding of how different parts of asp.net ajax work, but I still want to see how it all ties up together. Could someone get me the source of PageFlakes?
The last 1/3 of the Dino’s book mentions something about writing ajax enabled applications, but I have not gotten to that part yet..
My Book Rating to Introducing Microsoft ASP.NET AJAX - Good Times!
No comments70-528 - Passed
I passed this exam a month ago, just didn’t have time to write about it. This is my second exam in the .NET certification route and that means that I am officially MCTS now. Fear my power!
I was pleasantly surprised by the study guide and the exam itself. I have been doing asp.net for 5 years now and I still learned some new stuff.
Which proves that everybody should get certified and not for the official MS welcome kit, which is really lame, but to make sure that one has good understanding what .net and asp.net have to offer and not to reinvent the wheel.
No comments“Ambiguous match found” in a Web Control - a Possible Bug
If you use ASP.NET AJAX you might come up with this error popup - “Ambiguous match found”.
The issue here is that you have 2 variables that are named the same but have different casing. You have to rename the variables to have different names. Changing from protected to private will not help.
More info can be found at Eran Sandler’s blog - “Ambiguous match found” in a Web Control - a Possible Bug.
Eran Sandler’s blog - Subscribed!
1 commentHow to instantiate templates (properly)
Something for myself to bookmark. Here is a really good article describing the right way to instantiate templates in asp.net controls.
Every time a control is added to a parent control the child control will immediately “catch up” to the lifecycle point of the parent control. The control lifecycle includes the familiar Init, Load, PreRender, and a number of other lifecycle stages related to state management. When a template is instantiated through a call to InstantiateIn, all that happens (typically) is that the controls in the template are instantiated one by one, and added to the container that you passed in to InstantiateIn, again one by one.
How to instantiate templates (properly)
I also subscribed to the blog and waiting for more good articles.
No commentsHowTo - CompositeControl with a TextBox and a bunch of Validators
Here is an example of how I create composite controls in small server control library. It is pretty handy. With controls like this you can say something like this:
<csc:textbox id=”customServerControl1″ minlength=”4″ maxlength=”10″ required=”true” runat=”server” />
And that’s it! The composite control will automatically add the required validators and will create appropriate error messages!
Here is the source code:
using System; using System.Security.Permissions; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace SashaSydoruk.Web.UI.WebControls { [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] [ToolboxData(“< {0}:textbox required=\"false\" runat=\"server\" />“)] [ValidationProperty(“Text”)] public class TextBox : CompositeControl { protected System.Web.UI.WebControls.TextBox _textBox = null; protected RequiredFieldValidator _reqValidator = null; protected RegularExpressionValidator _regExValidator = null; protected TextBoxLengthValidator _lengthValidator = null; protected string _regExValidatorErrorMessage = string.Empty; #region Constructors public TextBox() { EnsureChildControls(); } #endregion #region Error Messages public const string REQUIRED = “is a required field.”; public const string REGEX = “is invalid.”; public const string LENGTH = “length has to be {0} to {1} characters long”; #endregion #region Public Properties public System.Web.UI.WebControls.TextBox InnerTextBox { get { return _textBox; } } public RequiredFieldValidator InnerRequiredFieldValidator { get { return _reqValidator; } } public RegularExpressionValidator InnerRegularExpressionValidator { get { return _regExValidator; } } public TextBoxLengthValidator InnerTextBoxLengthValidator { get { return _lengthValidator; } } public TextBoxMode TextMode { get { return _textBox.TextMode; } set { _textBox.TextMode = value; } } public bool ReadOnly { get { object o = ViewState[“ReadOnly”]; if(o == null) { return false; } else { return bool.Parse(o.ToString()); } } set { ViewState[“ReadOnly”] = value; } } public int MaxLength { get { return _lengthValidator.MaximumLength; } set { _lengthValidator.MaximumLength = value; SetupValidators(); } } public int MinLength { get { return _lengthValidator.MinimumLength; } set { _lengthValidator.MinimumLength = value; SetupValidators(); } } public string RegularExpression { get { return _regExValidator.ValidationExpression; } set { _regExValidator.ValidationExpression = value; SetupValidators(); } } public string DisplayName { get { object o = ViewState[“DisplayName”]; if(o == null) { return string.Empty; } else { return o.ToString(); } } set { ViewState[“DisplayName”] = value; SetupValidators(); } } public bool Required { get { return _reqValidator.Visible; } set { _reqValidator.Visible = value; SetupValidators(); } } public virtual string Text { get { return _textBox.Text; } set { _textBox.Text = value; } } #endregion protected override void OnInit(EventArgs e) { EnsureChildControls(); base.OnInit(e); } protected override void Render(HtmlTextWriter writer) { _textBox.Width = Width; _textBox.Height = Height; _textBox.RenderControl(writer); _reqValidator.RenderControl(writer); _lengthValidator.RenderControl(writer); _regExValidator.RenderControl(writer); } protected override void CreateChildControls() { Controls.Clear(); _textBox = new System.Web.UI.WebControls.TextBox(); _textBox.ID = “textBox”; Controls.Add(_textBox); //Add required validator _reqValidator = new RequiredFieldValidator(); Controls.Add(_reqValidator); //Add length validator _lengthValidator = new TextBoxLengthValidator(); Controls.Add(_lengthValidator); //Add RegularExpression validator _regExValidator = new RegularExpressionValidator(); Controls.Add(_regExValidator); if(Width.Value == 0) { _textBox.Width = Unit.Pixel(170); } Required = false; SetupValidators(); } private void SetupValidators() { _reqValidator.Display = ValidatorDisplay.None; _reqValidator.ControlToValidate = _textBox.ID; _lengthValidator.Display = ValidatorDisplay.None; _lengthValidator.ControlToValidate = _textBox.ID; _regExValidator.Display = ValidatorDisplay.None; _regExValidator.ControlToValidate = _textBox.ID; if(MaxLength > 0) { _textBox.MaxLength = MaxLength; } _lengthValidator.Visible = (MaxLength > 0 || MinLength > 0); _regExValidator.Visible = RegularExpression.Length > 0; _reqValidator.ErrorMessage = DisplayName + ” “ + REQUIRED; if(MinLength == 0 && MaxLength > 0) { _lengthValidator.ErrorMessage = DisplayName + ” “ + string.Format(“is too long. {0} characters max.”, MaxLength); } else if(MinLength > 0 && MaxLength == 0) { _lengthValidator.ErrorMessage = DisplayName + ” “ + string.Format(“is too short. {0} characters min.”, MinLength); } else if(MinLength > 0 && MaxLength > 0) { _lengthValidator.ErrorMessage = DisplayName + ” “ + string.Format(“has to be {0} to {1} characters long.”, MinLength, MaxLength); } else if(MinLength > 0 && MaxLength > 0 && MinLength == MaxLength) { _lengthValidator.ErrorMessage = DisplayName + ” “ + string.Format(“has to be {0} characters long.”, MinLength); } _regExValidator.ErrorMessage = DisplayName + ” “ + REGEX; } } }
FormsAuthentication.SetAuthCookie does not work the same way in ASP.NET 2.0
No commentsObviously I missed the boat somewhere along the line. I realized today that I’ve never used FormsAuthentication in an ASP.NET v2.0 application before. As it turns out, it doesn’t work the same as it used to.