How do we stop those trigger happy web users who feel the need to press buttons more than once. One way is to disable/change the button on the first click. All that is required is a couple of simple lines of code to make this happen. In my Page_Load event I have the following;
if (!IsPostBack)
{
MyASPNetButton.Attributes.Add("onclick", "this.value='Please wait...'; this.disabled=true;" + Page.ClientScript.GetPostBackEventReference(MyASPNetButton, "").ToString());
}
Category Archives: C#
Silverlight/WPF Design Time data
Like all good things, its simple and straight forward. For more details take a look at this post
Solution – XamlParseException [Line : 0, Position 0] in Expression Blend Design Mode
Sometimes it just really helps to read the manual. This is a link to my post in the Expression Blend forum.
Retrieving parameters passed to WCF Async method
This useful tip came in very handy for me…
Silverlight and Session variables
I have seen numerous postings about how to access Session data from the current HttpContext using WCF. A simple example can be found here. Whilst looking for a solution to another Silverlight problem I came across this post about passing large text to SL using initParams and it got me thinking. Could I use the same concept to read my Session variables?
The short answer is Yes, with a few small changes. My initial problem was that my session variable contained a class of complex types. In order to serialize this I just need to mark the class as [Serializable]. I then set my initParams value:
<param name="InitParams" value="<%=InitParams%>" />
In the code behind for the page hosting the SL control I added:
protected string InitParams { get; private set; }
Then I just needed to convert my Session variable to a Base64 string during the Page_Load event.
MemoryStream stream = new MemoryStream(); XmlSerializer serializer = new XmlSerializer(typeof(MyClass)); serializer.Serialize(stream, <my session variable> ); // Of type MyClass stream.Position = 0; string data = Convert.ToBase64String(stream.ToArray()); InitParams = "SessionDetails=" + data;
In my Silverlight Page, I just had to do the reverse to get my class back from the Base64 string.
if (App.Current.Host.InitParams.ContainsKey("SessionDetails")) { MemoryStream ms = new MemoryStream(Convert.FromBase64String(App.Current.Host.InitParams["SessionDetails"])); StreamReader sr = new StreamReader(ms); string s = sr.ReadToEnd(); sr.Close(); sr.Dispose(); ms.Close(); ms.Dispose(); // Parse the string so we can determine the contents of the Session variable XElement xElement = XElement.Parse(s); }
And that is about it. The only other thing that is required is a bit a LINQ to get to the necessary values within the Session variable. Obviously this only works if you need to read in the Session variables one time when the SL control loads, but for me this was perfectly suitable.
Converting Byte Arrays to Strings (C#)
Accessing other resource files in your web application
System.MissingMethodException
Default Resource Files in Assemblies
ResourceManager
rm = new ResourceManager("MyAssembly.SomeNamespce.Properties.Resources", Assembly.GetExecutingAssembly());string
myString = rm.GetString("MyStringResource");