Error executing template "Designs/Swift/UserManagement/CreateProfile/CreateAccount.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at CompiledRazorTemplates.Dynamic.RazorEngine_20aed0d1fb7c4b6bbab6c19be0b0e0fd.Execute() in D:\dynamicweb.net\Solutions\Novicell\klinger.cloud.dynamicweb-cms.com\Files\Templates\Designs\Swift\UserManagement\CreateProfile\CreateAccount.cshtml:line 116
at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
2
3 @{
4 string pageTitle = Pageview.Page.GetDisplayName();
5 string pageId = GetGlobalValue("Global:Page.ID");
6 int signInPageId = Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.Area.ID, "SignInPage").ID;
7 string singInPageUrl = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(signInPageId);
8 string invalidName = !string.IsNullOrEmpty(GetString("UserManagement:User.Name.Input.Error")) ? "is-invalid" : "";
9 string invalidEmail = !string.IsNullOrEmpty(GetString("UserManagement:User.Email.Input.Error")) ? "is-invalid" : "";
10 string invalidCompanyName = !string.IsNullOrEmpty(GetString("UserManagement:User.Company.Input.Error")) ? "is-invalid" : "";
11 string invalidVat = !string.IsNullOrEmpty(GetString("UserManagement:User.VatRegNumber.Input.Error")) ? "is-invalid" : "";
12 string invalidPassword = !string.IsNullOrEmpty(GetString("UserManagement:User.NewPassword.Input.Error")) ? "is-invalid" : "";
13 string invalidConfirmPassword = !string.IsNullOrEmpty(GetString("UserManagement:User.NewPasswordConfirm.Input.Error")) ? "is-invalid" : "";
14 string invalidIndustrialSector = !string.IsNullOrEmpty(GetString("UserManagement:User.IndustrialSector.Input.Error")) ? "is-invalid" : "";
15 string invalidJobTitle = !string.IsNullOrEmpty(GetString("UserManagement:User.JobTitle.Input.Error")) ? "is-invalid" : "";
16 string invalidPhone = !string.IsNullOrEmpty(GetString("UserManagement:User.Phone.Input.Error")) ? "is-invalid" : "";
17 string invalidConsent = !string.IsNullOrEmpty(GetString("UserManagement:User.Consent.Input.Error")) ? "is-invalid" : "";
18 string invalidEmailAllowed = !string.IsNullOrEmpty(GetString("UserManagement:User.EmailAllowed.Input.Error")) ? "is-invalid" : "";
19
20 string contentPadding = Pageview.CurrentParagraph.Item["ContentPadding"] != null ? Pageview.CurrentParagraph.Item["ContentPadding"].ToString() : "";
21 contentPadding = contentPadding == "none" ? "px-0" : contentPadding;
22 contentPadding = contentPadding == "small" ? "p-2 p-md-3" : contentPadding;
23 contentPadding = contentPadding == "large" ? "p-4 p-md-5" : contentPadding;
24 var themeRaw = Pageview.CurrentParagraph.Item["Theme"]?.ToString();
25 string theme = !string.IsNullOrEmpty(themeRaw) ? " theme " + themeRaw.Replace(" ", "").Trim().ToLower() : " theme light";
26 }
27
28 <div class="@(contentPadding)">
29
30 @foreach (var error in GetLoop("FormValidationErrors"))
31 {
32 <div class="alert alert-danger mb-3" role="alert">
33 @error.GetString("UserManagement:User.FormValidationError.Message")
34 </div>
35 }
36
37 @if (!String.IsNullOrEmpty(GetString("error")))
38 {
39 <div class="alert alert-danger mb-5" role="alert">
40 @GetString("error")
41 </div>
42 }
43
44 <div class="card border-0@(theme) mx-auto" style="max-width: 30rem;">
45
46 <div class="card-header text-center p-4 border-bottom">
47 <h4 class="display-6 m-0">@pageTitle</h4>
48 @if (!string.IsNullOrEmpty(singInPageUrl))
49 {
50 <p class="card-text mt-2">
51 @Translate("Already have an account?") <a href="@singInPageUrl">@Translate("Sign in here")</a>
52 </p>
53 }
54 </div>
55
56 <div class="card-body p-4">
57
58 @GetString("UserManagement:User.FormStart")
59 <input type="hidden" name="UserManagementForm" value="1">
60 <div class="grid grid-1 gap-4">
61
62 <div>
63 <label class="form-label fs-7 mb-0 opacity-75" for="UserManagement_Form_Company">@Translate("Your Company")</label>
64 <div class="form-floating">
65 <input type="text" class="form-control @invalidCompanyName" placeholder="@Translate("Company")" name="UserManagement_Form_Company" id="UserManagement_Form_Company" value="@GetString("UserManagement:User.Company")" required />
66 <div class="invalid-feedback">@GetString("UserManagement:User.Company.Input.Error")</div>
67 <label for="UserManagement_Form_Company" class="form-label">@Translate("Company")</label>
68 </div>
69 </div>
70 <div>
71 <label class="form-label fs-7 mb-0 opacity-75" for="UserManagement_Form_IndustrialSector">@Translate("Your Industrial Sector")</label>
72
73 <div class="form-floating">
74 @GetString("UserManagement:User.CustomField.AccessUser_IndustrialSector.Input").Replace("select", "select class=\"form-control\" placeholder=\"IndustrialSector\"")
75 <input type="hidden" class="form-control @invalidIndustrialSector" name="UserManagement_Form_IndustrialSector" id="UserManagement_Form_IndustrialSector" value="@GetString("UserManagement:User.CustomField.AccessUser_IndustrialSector")" />
76 <div class="invalid-feedback">@GetString("UserManagement:User.CustomField.AccessUser_IndustrialSector.Input.Error")</div>
77 <label for="UserManagement_Form_IndustrialSector" class="form-label">@Translate("Industrial Sector")</label>
78 </div>
79 </div>
80
81 <div>
82 <label class="form-label fs-7 mb-0 opacity-75" for="UserManagement_Form_VatRegNumber">@Translate("Your Vat Number")</label>
83 <div class="form-floating">
84 <input type="text" class="form-control @invalidVat" placeholder="@Translate("VatNumber")" name="UserManagement_Form_VatRegNumber" id="UserManagement_Form_VatRegNumber" value="@GetString("UserManagement:User.VatRegNumber")" required />
85 <div class="invalid-feedback">@GetString("UserManagement:User.VatRegNumber.Input.Error")</div>
86 <label for="UserManagement_Form_VatRegNumber" class="form-label">@Translate("VatNumber")</label>
87 </div>
88 </div>
89 <div>
90 <label class="form-label fs-7 mb-0 opacity-75" for="UserManagement_Form_Name">@Translate("Your name")</label>
91 <div class="form-floating">
92 <input type="text" class="form-control @invalidName" placeholder="@Translate("Name")" name="UserManagement_Form_Name" id="UserManagement_Form_Name" value="@GetString("UserManagement:User.Name")" required />
93 <div class="invalid-feedback">@GetString("UserManagement:User.Name.Input.Error")</div>
94 <label for="UserManagement_Form_Name" class="form-label">@Translate("Name")</label>
95 </div>
96 </div>
97 <div>
98 <label class="form-label fs-7 mb-0 opacity-75" for="UserManagement_Form_JobTitle">@Translate("Your Job Title")</label>
99 <div class="form-floating">
100 <input type="text" class="form-control @invalidJobTitle" placeholder="@Translate("Job Title")" name="UserManagement_Form_JobTitle" id="UserManagement_Form_JobTitle" value="@GetString("UserManagement:User.JobTitle")" required />
101 <div class="invalid-feedback">@GetString("UserManagement:User.JobTitle.Input.Error")</div>
102 <label for="UserManagement_Form_JobTitle" class="form-label">@Translate("JobTitle")</label>
103 </div>
104 </div>
105 <div>
106 <label class="form-label fs-7 mb-0 opacity-75" for="UserManagement_Form_Phone">@Translate("Your Phone")</label>
107 <div class="form-floating">
108 <input type="text" class="form-control @invalidPhone" placeholder="@Translate("Phone")" name="UserManagement_Form_Phone" id="UserManagement_Form_Phone" value="@GetString("UserManagement:User.Phone")" />
109 <div class="invalid-feedback">@GetString("UserManagement:User.Phone.Input.Error")</div>
110 <label for="UserManagement_Form_Phone" class="form-label">@Translate("Phone")</label>
111 </div>
112 </div>
113
114 <!-- ADDRESS -->
115 @{
116 var languageId = Pageview.Area.Languages.FirstOrDefault(i => i.Active).EcomLanguageId;
117 var currentCountry = !string.IsNullOrEmpty(GetString("UserManagement:User.UserAddress.CountryCode.Value")) ? GetString("UserManagement:User.UserAddress.CountryCode.Value") : Pageview.Area.EcomCountryCode;
118
119 var communityCode = GetString("UserManagement:User.UserAddress.AccessUserAddress_Autonomous_Community");
120 var regions = Klinger.Website.Infrastructure.Services.CountryService.Instance.GetStates(currentCountry, communityCode, languageId);
121
122 var regionLabel = "State";
123
124 var userId = 0;
125 }
126
127 <div>
128 <label class="form-label fs-7 mb-0 opacity-75" for="UserManagement_Form_Address">@Translate("Street & number")</label>
129 <div class="form-floating">
130 <input type="text" class="form-control" placeholder="@Translate("Street & number")" id="UserManagement_Form_Address" name="UserManagement_Form_Address" value="@GetString("UserManagement:User.UserAddress.Address.Value")" required />
131 <div class="invalid-feedback">@GetString("UserManagement:User.UserAddress.Address.Input.Error")</div>
132 <label for="UserManagement_Form_Address" class="form-label">@Translate("Street & number")</label>
133 </div>
134 </div>
135
136 <div>
137 <label class="form-label fs-7 mb-0 opacity-75" for="UserManagement_Form_CountryCode">@Translate("Country")</label>
138 <div class="form-floating">
139 <select class="form-select" id="UserManagement_Form_CountryCode" name="UserManagement_Form_CountryCode">
140 <option selected>@Translate("Select country")</option>
141 @foreach (var country in GetLoop("UserManagement.CountryList"))
142 {
143 var selected = country.GetString("Country.Code2") == currentCountry ? "selected" : "";
144 <option value="@country.GetString("Country.Code2")" @selected>@country.GetString("Country.Name")</option>
145 }
146 </select>
147 <label for="UserManagement_Form_CountryCode" class="form-label">@Translate("Country")</label>
148 </div>
149 </div>
150
151 <div>
152 <label class="form-label fs-7 mb-0 opacity-75" for="UserManagement_Form_Zip">@Translate("Zip")</label>
153 <div class="form-floating">
154 <input type="text" class="form-control" placeholder="@Translate("Zip")" id="UserManagement_Form_Zip" name="UserManagement_Form_Zip" value="@GetString("UserManagement:User.UserAddress.Zip.Value")" required />
155 <div class="invalid-feedback">@GetString("UserManagement:User.UserAddress.Zip.Input.Error")</div>
156 <label for="UserManagement_Form_Zip" class="form-label">@Translate("Zip code")</label>
157 </div>
158 </div>
159
160 <div>
161 <label class="form-label fs-7 mb-0 opacity-75" for="UserManagement_Form_City">@Translate("Town / City")</label>
162 <div class="form-floating">
163 <input type="text" class="form-control" placeholder="@Translate("Town / City")" id="UserManagement_Form_City" name="UserManagement_Form_City" value="@GetString("UserManagement:User.UserAddress.City.Value")" required />
164 <div class="invalid-feedback">@GetString("UserManagement:User.UserAddress.City.Input.Error")</div>
165 <label for="UserManagement_Form_City" class="form-label">@Translate("Town / City")</label>
166 </div>
167 </div>
168
169 @switch (currentCountry)
170 {
171 case "CA":
172 regionLabel = Translate("Province");
173 break;
174 case "GB":
175 case "ES":
176 regionLabel = Translate("Region");
177 break;
178 case "US":
179 regionLabel = Translate("State");
180 break;
181 default:
182 regionLabel = Translate("State");
183 break;
184 }
185
186 @{
187 var hasCommunities = Klinger.Website.Infrastructure.Services.CountryService.Instance.HasRegions(currentCountry);
188 }
189 <div id="CommunityContainer" style="display: @(hasCommunities?"block":"none")">
190 <label class="form-label fs-7 mb-0 opacity-75" for="CustomField.AccessUserAddress_AccessUserAddress_Autonomous_Community">@Translate("Autonomous Community")</label>
191 <div class="form-floating">
192
193 <select class="form-select" id="SpanishRegionSelect" onchange="handleRegionChange()">
194 <option value="">@Translate("Select autonomous community")</option>
195 @if (hasCommunities)
196 {
197 var communities = Klinger.Website.Infrastructure.Services.CountryService.Instance.GetRegions(0, languageId);
198 foreach (var community in communities)
199 {
200 var selected = community.Key.Equals(communityCode) ? "selected=\"selected\"" : "";
201 <option value="@community.Key" @selected>@community.Value</option>
202 }
203 }
204 </select>
205 <label for="CustomField.AccessUserAddress_AccessUserAddress_Autonomous_Community">@Translate("Autonomous Community")</label>
206 <input type="hidden" name="CustomField.AccessUser_AccessUser_Autonomous_Community" id="CustomField.AccessUser_AccessUser_Autonomous_Community" value="@communityCode" />
207 </div>
208 </div>
209
210 @{
211 var hasStates = regions != null && regions.Any();
212 }
213 <div id="StateContainer" style="display: @(hasStates?"block":"none")">
214 <label class="form-label fs-7 mb-0 opacity-75" for="UserManagement_Form_State">@Translate("Region")</label>
215 <div class="form-floating">
216 @{
217 var regionCode = GetString("UserManagement:User.UserAddress.State.Value");
218
219 <select class="form-select" id="SpanishStateSelect" onchange="handleStateChange()">
220 <option value="">@Translate("Select region")</option>
221 @foreach (var region in regions)
222 {
223 var selected = region.Key == regionCode ? "selected" : "";
224 <option value="@region.Key" @selected>@region.Value</option>
225 }
226 </select>
227 }
228 <label for="UserManagement_Form_State">@regionLabel</label>
229 @if (regions.ContainsKey(regionCode))
230 {
231 <input type="hidden" name="UserManagement_Form_State" id="UserManagement_Form_State" value="@regionCode" />
232 }
233 else
234 {
235 <input type="hidden" name="UserManagement_Form_State" id="UserManagement_Form_State" />
236 }
237 </div>
238 </div>
239
240 <div>
241 <label class="form-label fs-7 mb-0 opacity-75" for="UserManagement_Form_Email">@Translate("Your email")</label>
242 <div class="form-floating">
243 <input type="email" class="form-control @invalidEmail" placeholder="@Translate("Email")" name="UserManagement_Form_Email" id="UserManagement_Form_Email" value="@GetString("UserManagement:User.Email")" required />
244 <div class="invalid-feedback">@GetString("UserManagement:User.Email.Input.Error")</div>
245 <label for="UserManagement_Form_Email" class="form-label">@Translate("Email")</label>
246 </div>
247 </div>
248 <div>
249 <label class="form-label fs-7 mb-0 opacity-75" for="UserManagement_Form_NewPassword">@Translate("Password")</label>
250 <div class="form-floating">
251 <input class="form-control @invalidPassword" placeholder="@Translate("Password")" type="password" id="UserManagement_Form_NewPassword" name="UserManagement_Form_NewPassword" value="" autocomplete="off" required>
252 <div class="invalid-feedback">@GetString("UserManagement:User.NewPassword.Input.Error")</div>
253 <label for="UserManagement_Form_NewPassword" class="form-label">@Translate("Password")</label>
254 </div>
255 </div>
256 <div>
257 <label class="form-label fs-7 mb-0 opacity-75" for="UserManagement_Form_NewPasswordConfirm">@Translate("Confirm password")</label>
258 <div class="form-floating">
259 <input class="form-control @invalidConfirmPassword" placeholder="@Translate("Confirm password")" type="password" id="UserManagement_Form_NewPasswordConfirm" name="UserManagement_Form_NewPasswordConfirm" value="" autocomplete="off" required>
260 <div class="invalid-feedback">@GetString("UserManagement:User.NewPasswordConfirm.Input.Error")</div>
261 <label for="UserManagement_Form_NewPasswordConfirm" class="form-label">@Translate("Confirm password")</label>
262 </div>
263 </div>
264 <div>
265 <div class="form-check">
266 <input type="checkbox" class="form-check-input @invalidConsent" name="UserManagement_Form_Consent" id="UserManagement_Form_Consent" value="@GetString("UserManagement:User.Consent")" required />
267 <input type="hidden" class="form-control" name="UserManagement_Form_Consent" id="UserManagement_Form_Consent" value="@GetString("UserManagement:User.Consent")" />
268 <div class="invalid-feedback">@GetString("UserManagement:User.Consent.Input.Error")</div>
269 <label for="UserManagement_Form_Consent" class="form-check-label">@Translate("GDPR Consent")</label>
270 </div>
271 </div>
272 <div>
273 <div class="form-check">
274 <input type="checkbox" class="form-check-input @invalidEmailAllowed" name="UserManagement_Form_EmailAllowed" id="UserManagement_Form_EmailAllowed" value="@GetString("UserManagement:User.EmailAllowed")" />
275 <input type="hidden" class="form-control" name="UserManagement_Form_EmailAllowed" id="UserManagement_Form_EmailAllowed" value="@GetString("UserManagement:User.EmailAllowed")" />
276 <label for="UserManagement_Form_EmailAllowed" class="form-check-label">@Translate("Email Allowed")</label>
277 </div>
278 </div>
279
280 <button type="submit" class="btn btn-primary btn-lg" id="CreateNewAccountButton">@Translate("Create your new account")</button>
281 </div>
282 @GetString("UserManagement:User.FormEnd")
283
284 </div>
285 </div>
286 </div>
287
288 <script>
289 // declarations
290 var dwCountryCode = "@currentCountry";
291 var dwUserId = "@userId";
292 var dwLanguageId = "@languageId";
293 var stateElement = document.getElementById("SpanishStateSelect");
294 var regionElement = document.getElementById("SpanishRegionSelect");
295 var stateHiddenElement = document.getElementById("UserManagement_Form_State");
296 var regionHiddenElement = document.getElementById("CustomField.AccessUser_AccessUser_Autonomous_Community");
297 var communityContainer = document.getElementById("CommunityContainer");
298 var stateContainer = document.getElementById("StateContainer");
299 var dwStateLabel = "@Translate("Select region")";
300 var dwRegionLabel = "@Translate("Select autonomous community")";
301 var selectedZip = document.getElementById("UserManagement_Form_Zip");
302
303 if (!dwCountryCode || dwCountryCode.length == 0) {
304 dwCountryCode = document.getElementById("UserManagement_Form_CountryCode");
305 }
306
307 function handleStateChange() {
308 let labelText = '';
309 for (let i = 0; i < stateElement.options.length; i++) {
310 if (stateElement.options[i].value === stateElement.value) {
311 labelText = stateElement.options[i].text;
312 break;
313 }
314 }
315
316 stateHiddenElement.value = labelText;
317 }
318
319 function handleRegionChange() {
320 let labelText = '';
321 for (let i = 0; i < regionElement.options.length; i++) {
322 if (regionElement.options[i].value === regionElement.value) {
323 labelText = regionElement.options[i].text;
324 break;
325 }
326 }
327 regionHiddenElement.text = regionElement.value;
328 regionHiddenElement.value = labelText;
329
330 stateHiddenElement.value = "";
331 var selectedCountry = document.getElementById("UserManagement_Form_CountryCode").value;
332 updateStatesSelect(selectedCountry);
333 }
334
335 async function handleRegionChangeWithState(code) {
336 let labelRegionText = '';
337 for (let i = 0; i < regionElement.options.length; i++) {
338 if (regionElement.options[i].value === regionElement.value) {
339 labelRegionText = regionElement.options[i].text;
340 break;
341 }
342 }
343 regionHiddenElement.text = regionElement.value;
344 regionHiddenElement.value = labelRegionText;
345
346 var selectedCountry = document.getElementById("UserManagement_Form_CountryCode").value;
347 await updateStatesSelect(selectedCountry, code);
348
349 let labelText = '';
350 for (let i = 0; i < stateElement.options.length; i++) {
351 if (stateElement.options[i].value === code) {
352 labelText = stateElement.options[i].text;
353 break;
354 }
355 }
356 stateHiddenElement.value = labelText;
357 }
358
359 function handleCountryChange() {
360 var selectedCountry = document.getElementById("UserManagement_Form_CountryCode").value;
361
362 toggleCountry(selectedCountry);
363 }
364
365 function handleZip() {
366 var selectedCountry = document.getElementById("UserManagement_Form_CountryCode").value;
367 var formZip = document.getElementById("UserManagement_Form_Zip").value;
368
369 if (formZip && formZip.length == 5) {
370 updateCitySelect(selectedCountry, formZip);
371 }
372 }
373
374 function toggleCountry(country) {
375 stateHiddenElement.value = "";
376 regionHiddenElement.value = "";
377
378 updateStatesSelect(country);
379 updateRegionSelect(country);
380 }
381
382 async function updateStatesSelect(country, selected) {
383 try {
384 const response = await fetch(`/api/country/states?country=${country}®ion=${regionHiddenElement.text}&language=${dwLanguageId}`);
385
386 if (!response.ok) {
387 throw new Error(`Request failed. Returned status of ${response.status}`);
388 }
389
390 const data = await response.json();
391 const select = document.getElementById('SpanishStateSelect');
392
393 if (data && Object.keys(data).length > 0) {
394 // Clear existing options
395 select.innerHTML = '';
396
397 // Add an empty option as the default
398 const defaultOption = document.createElement('option');
399 defaultOption.value = '';
400 defaultOption.textContent = dwStateLabel; // Or any placeholder text you prefer
401 select.appendChild(defaultOption);
402
403 // Add new options from the response
404 for (const key in data) {
405 const option = document.createElement('option');
406 option.value = key;
407 option.textContent = data[key];
408 if (selected && selected.length && selected == key) {
409 option.selected = true;
410 }
411
412 select.appendChild(option);
413 }
414
415 // Display the select element
416 stateContainer.style.display = 'block';
417 } else {
418 // Hide the select element if response is null or empty
419 stateContainer.style.display = 'none';
420 }
421 } catch (error) {
422 console.error('Request error:', error);
423 stateContainer.style.display = 'none';
424 }
425 }
426
427 function updateRegionSelect(country) {
428 var xhr = new XMLHttpRequest();
429 xhr.open('GET', '/api/country/regions?user=' + dwUserId +'&country=' + country + '&language=' + dwLanguageId, true);
430
431 xhr.onload = function () {
432 var select = document.getElementById('SpanishRegionSelect');
433
434 if (xhr.status === 200) {
435 var response = JSON.parse(xhr.responseText);
436
437 if (response && Object.keys(response).length > 0) {
438 // Clear existing options
439 select.innerHTML = '';
440
441 // Add an empty option as the default
442 var defaultOption = document.createElement('option');
443 defaultOption.value = '';
444 defaultOption.textContent = dwRegionLabel; // Or any placeholder text you prefer
445 select.appendChild(defaultOption);
446
447 // Add new options from the response
448 for (var key in response) {
449 var option = document.createElement('option');
450 option.value = key;
451 option.textContent = response[key];
452 select.appendChild(option);
453 }
454
455 // Display the select element
456 communityContainer.style.display = 'block';
457 } else {
458 // Hide the select element if response is null or empty
459 communityContainer.style.display = 'none';
460 }
461 } else {
462 console.error('Request failed. Returned status of ' + xhr.status);
463 communityContainer.style.display = 'none';
464 }
465 };
466
467 xhr.onerror = function () {
468 console.error('Request error.');
469 stateContainer.style.display = 'none';
470 };
471
472 xhr.send();
473 }
474
475 function updateCitySelect(country, code) {
476 var xhr = new XMLHttpRequest();
477 xhr.open('GET', '/api/country/location?country=' + country + '&code=' + code, true);
478
479 xhr.onload = function () {
480 if (xhr.status === 200) {
481 var response = JSON.parse(xhr.responseText);
482
483 if (response && Object.keys(response).length > 0) {
484
485 if (response.Success) {
486 selectedZip.value = code;
487 regionElement.value = response.RegionCode;
488 handleRegionChangeWithState(response.StateCode);
489
490 if (response.PostalCodeName.length && response.PostalCodeName.length > 0) {
491 document.getElementById("UserManagement_Form_City").value = response.PostalCodeName;
492 }
493 }
494 }
495 else {
496
497 }
498 }
499 else {
500 console.error('Request failed. Returned status of ' + xhr.status);
501 }
502 };
503
504 xhr.onerror = function () {
505 console.error('Request error.');
506 stateContainer.style.display = 'none';
507 };
508
509 xhr.send();
510 }
511
512 function submitForm() {
513 document.querySelector("#UserManagement_Form_State").value = "";
514 var form = document.querySelector("#AddressForm");
515 UserManagement_Form_State
516 form.requestSubmit();
517 }
518
519 // event handlers
520 document.getElementById("UserManagement_Form_CountryCode").onchange = handleCountryChange;
521 document.addEventListener("DOMContentLoaded", function () {
522 var zipInput = document.getElementById("UserManagement_Form_Zip");
523
524 zipInput.addEventListener("input", handleZip);
525 });
526 </script>