예제 #1
0
        /// <summary>
        /// Renders client-side Javascript function for looking up single values from a table.
        /// </summary>
        /// <param name="valueFieldName">Table field name as defined in the table.</param>
        /// <param name="idFieldName">Name of primary key field, defaults to "ID".</param>
        /// <param name="lookupFunctionName">Name of lookup function, defaults to lookup + <paramref name="groupName"/>.ToTitleCase() + Value.</param>
        /// <param name="arrayName">Name of lookup function, defaults to lookup + <paramref name="groupName"/>.ToTitleCase() + Value.</param>
        /// <returns>Client-side Javascript lookup function.</returns>
        public static string RenderAbstract <T>(string valueFieldName, string idFieldName = "ID", string lookupFunctionName = null, string arrayName = null) where T : class, new()
        {
            StringBuilder javascript  = new StringBuilder();
            DataContext   dataContext = new DataContext();

            if (string.IsNullOrWhiteSpace(lookupFunctionName))
            {
                lookupFunctionName = $"lookup{valueFieldName}Value";
            }

            if (string.IsNullOrWhiteSpace(arrayName))
            {
                arrayName = $"{valueFieldName}";
            }
            TableOperations <T> operations = dataContext.Table <T>() as TableOperations <T>;

            javascript.AppendLine($"var {arrayName} = [];\r\n");
            foreach (T record in operations.QueryRecords())
            {
                var valueField = operations.GetFieldValue(record, valueFieldName);
                var idField    = operations.GetFieldValue(record, idFieldName);

                javascript.AppendLine($"        {arrayName}[\"{idField.ToString().JavaScriptEncode()}\"] = \"{valueField?.ToString().JavaScriptEncode()}\";");
            }

            javascript.AppendLine($"\r\n        function {lookupFunctionName}(value) {{");
            javascript.AppendLine($"            return {arrayName}[value];");
            javascript.AppendLine("        }");

            return(javascript.ToString());
        }