Esempio n. 1
0
        public static IBindingsBuilder <T> Template <T, F>(
            this IBindingsBuilder <T> bindingsBuilder,
            string templateName,
            Expression <Func <T, F> > expression,
            string afterAdd            = null,
            string beforeRemove        = null,
            string afterRender         = null,
            object templateOptions     = null,
            string prefix              = null,
            bool applyClientValidation = true,
            bool fastNoJavaScript      = false,
            string afterAllRender      = null,
            string templateEngine      = null)
            where T : class
        {
            if (expression == null)
            {
                throw (new ArgumentNullException("expression"));
            }
            if (string.IsNullOrWhiteSpace(templateName))
            {
                throw (new ArgumentNullException("templateName"));
            }
            string format       = null;
            string actualPrefix = BasicHtmlHelper.AddField(
                bindingsBuilder.ModelPrefix,
                ExpressionHelper.GetExpressionText(expression));

            if (prefix == null)
            {
                prefix = actualPrefix;
            }
            StringBuilder sb = new StringBuilder();

            if (templateName[0] != '@')
            {
                sb.Append("template: { name: &quot;");
                sb.Append(templateName);
                if (typeof(IEnumerable).IsAssignableFrom(typeof(F)))
                {
                    sb.Append("&quot;, foreach: ");
                }
                else
                {
                    sb.Append("&quot;, data: ");
                }
            }
            else
            {
                templateName = templateName.Substring(1);
                sb.Append("template: { name: ");
                sb.Append(templateName);
                if (typeof(IEnumerable).IsAssignableFrom(typeof(F)))
                {
                    sb.Append(", foreach: ");
                }
                else
                {
                    sb.Append(", data: ");
                }
            }
            sb.Append(bindingsBuilder.GetFullBindingName(expression));

            if (afterRender != null)
            {
                sb.Append(", afterRender: ");
                sb.Append(afterRender);
            }
            if (afterAdd != null)
            {
                sb.Append(", afterAdd: ");
                sb.Append(afterAdd);
            }
            if (beforeRemove != null)
            {
                sb.Append(", beforeRemove: ");
                sb.Append(beforeRemove);
            }
            if (afterAllRender != null)
            {
                sb.Append(", afterAllRender: ");
                sb.Append(afterAllRender);
            }
            if (templateEngine != null)
            {
                sb.Append(", templateEngine: ko.");
                sb.Append(templateEngine);
                sb.Append(".instance");
            }
            var additionalOptions = new
            {
                ModelPrefix    = "&quot;" + prefix + "&quot;",
                ModelId        = "&quot;" + BasicHtmlHelper.IdFromName(prefix) + "&quot;",
                ItemPrefix     = "&quot;&quot;",
                templateSymbol = "&quot;" + ClientTemplateHelper.templateSymbol + "0&quot;"
            };

            sb.Append(", templateOptions: {");
            if (templateOptions != null)
            {
                sb.Append(BasicHtmlHelper.TranslateAnonymous(templateOptions));
                sb.Append(", ");
            }
            sb.Append(BasicHtmlHelper.TranslateAnonymous(additionalOptions));

            sb.Append(" }");
            sb.Append(", processingOptions: {");
            if (bindingsBuilder.ValidationType == "UnobtrusiveClient")
            {
                sb.Append("unobtrusiveClient: true");
                if (bindingsBuilder.GetHelper().ViewData["_TemplateLevel_"] == null)
                {
                    bindingsBuilder.AddServerErrors(actualPrefix);
                }
            }
            else
            {
                sb.Append("unobtrusiveClient: false");
            }
            sb.Append(fastNoJavaScript ? ", fastNoJavaScript: true" : ", fastNoJavaScript: false");
            sb.Append(applyClientValidation ? ", applyClientValidation: true" : ", applyClientValidation: false");
            sb.Append(" }");
            sb.Append(" }");
            format = sb.ToString();


            bindingsBuilder.Add(
                format
                );
            return(bindingsBuilder);
        }