public static string GetClientInitScriptPath(Uri uri, JsonProviderInfo info)//string varName, Type type) { string varName = info.VarName; Type type = info.ProviderType; UriBuilder builder = new UriBuilder(uri.ToString()); builder.Query = "init=true&t=" + GetClientTypeName(type) + "&varname=" + varName + "&ienocache=" + StringExtensions.RandomString(4, false, false); return(builder.ToString()); }
/// <summary> /// Registers the proxy for the specified type onto the specified page /// using the specified varName. /// </summary> /// <param name="page">The Page</param> /// <param name="varName">The client side name of the proxy instance.</param> /// <param name="type">The .Net type to register</param> private static void RegisterClientInitScript(Page page, JsonProviderInfo info) { if (page == null) { return; } if (HttpContext.Current == null) { throw NewInvalidOperationException(); } string scriptPath = GetClientInitScriptPath(page.Request.Url, info); page.ClientScript.RegisterClientScriptInclude(info.ClientTypeName, scriptPath); }
internal static void SetProvider(object handlerInstance, Page page) { Type serverHandler = handlerInstance.GetType(); if (serverHandler == typeof(RuntimeTypeHandle)) { return; } JsonProviders providers = SingletonHelper.GetSessionSingleton <JsonProviders>();//if (javascriptHandlers == null) JsonProviderInfo provider = providers.Add(handlerInstance); if (page != null) { RegisterClientInitScript(page, provider); } }
public JsonProviderInfo Add(object provider) { JsonProviderInfo info = new JsonProviderInfo(provider); JsonProviderInfo retVal = info; lock (providerLock) { if (providersByVarName.ContainsKey(info.VarName)) { JsonProviderInfo registered = providersByVarName[info.VarName]; if (registered.ProviderType != info.ProviderType && !info.Namespace.StartsWith("ASP")) { throw ExceptionHelper.CreateException <JsonInvalidOperationException>( @"JsonProxy Var Name Already In Use: {0}, Type: {1} Failed To Register: {0}, Type: {2}", registered.VarName, registered.ClientTypeName, info.VarName, info.ClientTypeName); } else if (info.Namespace.StartsWith("ASP")) { this.providersByTypeName[info.ClientTypeName] = info; this.providersByVarName[info.VarName] = info; retVal = info; } else { retVal = registered; } } else { this.providersByVarName.Add(info.VarName, info); this.providersByTypeName.Add(info.ClientTypeName, info); } } return(retVal); }