Beispiel #1
0
        internal static IBindingsBuilder <T> InnerClientViewModel <T>(
            this HtmlHelper htmlHelper,
            string uniqueName,
            T model,
            string partialPrefix,
            string prefix,
            string htmlElementId,
            bool initialSave,
            bool applyBindings,
            bool applyDependencies = true
            )
            where T : class, new()
        {
            if (partialPrefix == null)
            {
                partialPrefix = string.Empty;
            }
            if (prefix == null)
            {
                prefix = string.Empty;
            }
            if (uniqueName == null)
            {
                throw (new ArgumentNullException("uniqueName"));
            }

            string validationType = null;

            switch (MvcEnvironment.Validation(htmlHelper))
            {
            case ValidationType.StandardClient: validationType = "StandardClient"; break;

            case ValidationType.UnobtrusiveClient: validationType = "UnobtrusiveClient"; break;

            default: validationType = "Server"; break;
            }
            if (model == null)
            {
                return(new BindingsBuilder <T>(null, uniqueName, prefix, validationType, null, htmlHelper));
            }

            string script = null;

            if (applyBindings)
            {
                if (htmlElementId == null)
                {
                    script = rootBingingScript;
                }
                else
                {
                    script = elementBingingScript;
                }
            }
            else if (applyDependencies)
            {
                script = modelScript;
            }
            else
            {
                script = modelScriptNoDep;
            }

            ModelTranslator <T> translator = new ModelTranslator <T>();

            translator.ImportFromModel(model);

            htmlHelper.ViewContext.Writer.Write(
                BasicHtmlHelper.RenderDisplayInfo(htmlHelper,
                                                  typeof(ModelTranslator <T>),
                                                  partialPrefix, true));
            object ocount = htmlHelper.ViewContext.Controller.ViewData["__ClientModelsCount__"];
            int    count  = 0;

            if (ocount != null)
            {
                count = (int)ocount;
            }
            count++;
            htmlHelper.ViewContext.Controller.ViewData["__ClientModelsCount__"] = count;

            string jsonHiddenId = BasicHtmlHelper.IdFromName(
                BasicHtmlHelper.AddField(prefix, "$.JSonModel" + count.ToString()));

            htmlHelper.ViewContext.Writer.Write(
                BasicHtmlHelper.SafeHiddenUC(htmlHelper,
                                             BasicHtmlHelper.AddField(partialPrefix,
                                                                      "$.JSonModel"),
                                             string.Empty,
                                             jsonHiddenId
                                             )
                );
            string saveScript = string.Empty;

            if (initialSave)
            {
                saveScript = uniqueName + ".save();";
            }
            string assignement = uniqueName;

            if (!assignement.Contains('.'))
            {
                assignement = "var " + assignement;
            }
            string jsonModel = string.Format(script, assignement, uniqueName, translator.JSonModel, saveScript, htmlElementId, jsonHiddenId, validationType);

            htmlHelper.ViewContext.Writer.Write(jsonModel);


            IBindingsBuilder <T> result =
                new BindingsBuilder <T>(htmlHelper.ViewContext.Writer, uniqueName, prefix, validationType, jsonHiddenId, htmlHelper);

            /*       result.AddMethod("save", string.Format(@"
             *             function(){{
             *                     document.getElementById('{0}').value = ko.mapping.toJSON(this);
             *             }}",
             *                jsonHiddenId));
             *     result.AddMethod("validateAndSave", string.Format(@"
             *             function(){{
             *                 if(MvcControlsToolkit_FormIsValid('{0}', '{1}')){{
             *                     document.getElementById('{0}').value = ko.mapping.toJSON(this);
             *                     return true;
             *                 }}
             *                 return false;
             *             }}",
             *                jsonHiddenId, validationType));
             *     result.AddMethod("saveAndSubmit", string.Format(@"
             *             function(){{
             *                 if(this.validateAndSave()){{
             *                     $('#{0}').parents('form').submit();
             *                 }}
             *             }}",
             *                jsonHiddenId
             *                ));
             *     result.AddMethod("saveAndSubmitAlone", string.Format(@"
             *             function(formId){{
             *                 if(MvcControlsToolkit_FormIsValid(formId, '{1}')){{
             *                     this.save();
             *                     $('#{0}').parents('form').submit();
             *                 }}
             *             }}",
             *                jsonHiddenId,
             *                validationType
             *                )); */
            return(result);
        }