private SparkViewDescriptor GetViewDescriptor() { var descriptor = new SparkViewDescriptor().AddTemplate(TemplateKey); if (!string.IsNullOrEmpty(ModelProperty)) { AddAccessor(descriptor, false, Page.GetType().GetProperty(ModelProperty).PropertyType, "Model", "base.ViewData.Model"); } AddAccessor(descriptor, true, Page.GetType(), "Page", "base.Page"); AddAccessor(descriptor, true, NamingContainer.GetType(), "Container", "base.Container"); return(descriptor); }
protected override void RaiseCallbackEvent(string eventArgument) { var format = Common.GetNumberFormat(); var jss = new System.Web.Script.Serialization.JavaScriptSerializer(); var callbackArgs = (object[])(jss.DeserializeObject(eventArgument)); var methodName = (string)(callbackArgs[0]); var methodArgs = (object[])(callbackArgs[1]); if (methodName == "__Refresh") { string tileJavaScript; if (ImageLoadMode == ImageLoadMode.AdaptiveTile) { var tiles = new List <RectangleF>(); if (methodArgs != null) { for (var i = 0; i < methodArgs.Length; i += 4) { var tile = new RectangleF(Convert.ToSingle(methodArgs[i], format), Convert.ToSingle(methodArgs[i + 1], format), Convert.ToSingle(methodArgs[i + 2], format), Convert.ToSingle(methodArgs[i + 3], format)); tiles.Add(tile); } } tileJavaScript = GetRefreshImageTileJavaScript(tiles.ToArray()); } else { tileJavaScript = GetImageTileJavaScript(); } _callbackResult = "if(this._needToClearTiles()){this._clearTiles();};var tiles=" + tileJavaScript + ";this._addTiles(tiles());this._webImageLoader.showPrecreatedTiles();this._needToRefresh=false;"; } else { // Process all other callbacks except Refresh _bitmapChanged = false; // Try to find method first of all in NamingContainer, next in BindingContainer and to the end // into Parent element. // Get type of instance var objectType = NamingContainer.GetType(); var methodContainer = NamingContainer; // Get specified method var methodInfo = objectType.GetMethod(methodName); if (methodInfo == null) { objectType = BindingContainer.GetType(); methodContainer = BindingContainer; methodInfo = objectType.GetMethod(methodName); } if (methodInfo == null) { objectType = Parent.GetType(); methodContainer = Parent; methodInfo = objectType.GetMethod(methodName); } var returnValue = InvokeRemoteScriptingMethod(methodContainer, methodName, methodArgs); var code = new StringBuilder(); var v = "$find(\"" + ClientID + "\")"; code.Append(v + "._returnValue=" + jss.Serialize(returnValue) + ";"); code.Append(GetState()); _callbackResult = code.ToString(); } }
/// <summary> Dispatches the resources passed in <paramref name="values"/> to the control's properties. </summary> /// <param name="values"> An <c>IDictonary</c>: <string key, string value>. </param> protected virtual void Dispatch(IDictionary values) { HybridDictionary tabValues = new HybridDictionary(); HybridDictionary propertyValues = new HybridDictionary(); // Parse the values foreach (DictionaryEntry entry in values) { string key = (string)entry.Key; string[] keyParts = key.Split(new[] { ':' }, 3); // Is a property/value entry? if (keyParts.Length == 1) { string property = keyParts[0]; propertyValues.Add(property, entry.Value); } // Is collection entry? else if (keyParts.Length == 3) { // Compound key: "collectionID:elementID:property" string collectionID = keyParts[0]; string elementID = keyParts[1]; string property = keyParts[2]; IDictionary currentCollection = null; // Switch to the right collection switch (collectionID) { case c_resourceKeyTabs: { currentCollection = tabValues; break; } default: { // Invalid collection property s_log.Warn( "WebTabStrip '" + ID + "' in naming container '" + NamingContainer.GetType().FullName + "' on page '" + Page + "' does not contain a collection property named '" + collectionID + "'."); break; } } // Add the property/value pair to the collection if (currentCollection != null) { // Get the dictonary for the current element IDictionary elementValues = (IDictionary)currentCollection[elementID]; // If no dictonary exists, create it and insert it into the elements hashtable. if (elementValues == null) { elementValues = new HybridDictionary(); currentCollection[elementID] = elementValues; } // Insert the argument and resource's value into the dictonary for the specified element. elementValues.Add(property, entry.Value); } } else { // Not supported format or invalid property s_log.Warn( "WebTabStrip '" + ID + "' in naming container '" + NamingContainer.GetType().FullName + "' on page '" + Page + "' received a resource with an invalid or unknown key '" + key + "'. Required format: 'property' or 'collectionID:elementID:property'."); } } // Dispatch simple properties ResourceDispatcher.DispatchGeneric(this, propertyValues); // Dispatch to collections Tabs.Dispatch(tabValues, this, "Tabs"); }