public virtual PartialViewResult UpdateWebFormAjax(int?id, WebFormEditAdminViewModel WebFormEditAdminViewModel, WebFormFieldEditAdminViewModel[] WebFormFields, string FastAddField) { if (!id.HasValue) { return(HttpBadRequestPartial("id is null")); } if (WebFormEditAdminViewModel.WebFormId == 0) { return(HttpBadRequestPartial("Web Form Id in view model is 0")); } if (WebFormEditAdminViewModel.WebFormId != id.Value) { return(HttpBadRequestPartial("Web Form Id mismatch. Parameter value: '" + id.Value + "' != view model value: " + WebFormEditAdminViewModel.WebFormId)); } StoreFront storeFront = CurrentStoreFrontOrThrow; WebForm webFormToUpdate = storeFront.Client.WebForms.SingleOrDefault(wf => wf.WebFormId == WebFormEditAdminViewModel.WebFormId); if (webFormToUpdate == null) { throw new ApplicationException("Web Form not found in client web forms. WebFormId: " + WebFormEditAdminViewModel.WebFormId + " Client '" + storeFront.Client.Name + "' [" + storeFront.ClientId + "]"); } bool nameIsValid = GStoreDb.ValidateWebFormName(this, WebFormEditAdminViewModel.Name, storeFront.ClientId, WebFormEditAdminViewModel.WebFormId); bool fastAddIsValid = false; if (!string.IsNullOrWhiteSpace(FastAddField)) { fastAddIsValid = GStoreDb.ValidateWebFormFieldName(this, FastAddField, storeFront.ClientId, WebFormEditAdminViewModel.WebFormId, null); } if (nameIsValid && ModelState.IsValid) { WebForm webForm = null; try { webForm = GStoreDb.UpdateWebForm(WebFormEditAdminViewModel, storeFront, CurrentUserProfileOrThrow); WebFormEditAdminViewModel.UpdateWebForm(webForm); if (WebFormFields != null && WebFormFields.Count() > 0) { foreach (WebFormFieldEditAdminViewModel field in WebFormFields) { GStoreDb.UpdateWebFormField(field, storeFront, CurrentUserProfileOrThrow); } } if (fastAddIsValid) { WebFormField newField = GStoreDb.CreateWebFormFieldFastAdd(WebFormEditAdminViewModel, FastAddField, storeFront, CurrentUserProfileOrThrow); AddUserMessage("Field Created!", "Field '" + newField.Name.ToHtml() + "' [" + newField.WebFormFieldId + "] created successfully.", UserMessageType.Success); ModelState.Remove("FastAddField"); } AddUserMessage("Web Form Changes Saved!", "Web Form '" + webForm.Name.ToHtml() + "' [" + webForm.WebFormId + "] saved successfully for Client '" + storeFront.Client.Name.ToHtml() + "' [" + storeFront.ClientId + "]", UserMessageType.Success); this.ModelState.Clear(); WebFormEditAdminViewModel = new WebFormEditAdminViewModel(CurrentStoreFrontOrThrow, CurrentUserProfileOrThrow, webForm, isStoreAdminEdit: true, activeTab: WebFormEditAdminViewModel.ActiveTab, sortBy: WebFormEditAdminViewModel.SortBy, sortAscending: WebFormEditAdminViewModel.SortAscending); return(PartialView("_WebFormEditPartial", WebFormEditAdminViewModel)); } catch (Exception ex) { string errorMessage = "An error occurred while saving your changes to Web Form '" + WebFormEditAdminViewModel.Name + "' [" + WebFormEditAdminViewModel.WebFormId + "] for Client: '" + storeFront.Client.Name + "' [" + storeFront.ClientId + "] \nError: '" + ex.GetType().FullName + "'"; if (CurrentUserProfileOrThrow.AspNetIdentityUserIsInRoleSystemAdmin()) { errorMessage += " \nException.ToString(): '" + ex.ToString() + "'"; } AddUserMessage("Error Saving Web Form!", errorMessage.ToHtmlLines(), UserMessageType.Danger); ModelState.AddModelError("Ajax", errorMessage); } } else { AddUserMessage("Web Form Edit Error", "There was an error with your entry for Web Form " + WebFormEditAdminViewModel.Name.ToHtml() + " [" + WebFormEditAdminViewModel.WebFormId + "] for Client '" + storeFront.Client.Name.ToHtml() + "' [" + storeFront.ClientId + "]. Please correct it.", UserMessageType.Danger); } foreach (string key in this.ModelState.Keys.Where(k => k.StartsWith("WebFormFields[")).ToList()) { string temp = key.Remove(0, ("WebFormFields[").Length); temp = temp.Remove(temp.IndexOf(']')); int index = int.Parse(temp); System.Web.Mvc.ModelState value = null; this.ModelState.TryGetValue(key, out value); if (value.Errors.Count == 0) { this.ModelState.Remove(key); } else { this.ModelState.AddModelError("", "There was an error with field #" + (index + 1) + ". Please correct it and save again."); } } WebFormEditAdminViewModel.FillFieldsFromViewModel(webFormToUpdate, WebFormFields); WebFormEditAdminViewModel.IsStoreAdminEdit = true; return(PartialView("_WebFormEditPartial", WebFormEditAdminViewModel)); }