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); }