Skip to content

Commit 843e431

Browse files
committed
Supports HttpMethod = "Post" for Remote validation.
1 parent c974e4f commit 843e431

File tree

1 file changed

+37
-19
lines changed

1 file changed

+37
-19
lines changed

src/index.ts

Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -305,28 +305,48 @@ export class MvcValidationProviders {
305305
return true;
306306
}
307307

308-
return new Promise((ok, reject) => {
309-
let url = params['url'] + '?' + element.name + '=' + encodeURIComponent(value);
308+
// params.additionalfields: *.Email,*.Username
309+
let fieldSelectors: string[] = (params.additionalfields as string).split(',');
310+
let fields: StringKeyValuePair = {};
310311

311-
// params.additionalfields: *.Email,*.Username
312-
let xtras = (params.additionalfields as string).split(',');
312+
for (let fieldSelector of fieldSelectors) {
313+
let fieldName = fieldSelector.substr(2);
314+
let fieldElement = getRelativeFormElement(element.name, fieldSelector) as HTMLInputElement;
313315

314-
for (let i = 0; i < xtras.length; i++) {
315-
let xtra = xtras[i].substr(2);
316-
if (xtra === element.name) {
317-
continue;
318-
}
316+
let hasValue = Boolean(fieldElement && fieldElement.value);
317+
if (!hasValue) {
318+
continue;
319+
}
319320

320-
let e = document.getElementById(xtra) as HTMLInputElement;
321-
if (!e || !e.value) {
322-
continue;
323-
}
321+
fields[fieldName] = fieldElement.value;
322+
}
324323

325-
url = url + '&' + e.name + '=' + encodeURIComponent(e.value);
326-
}
324+
let url: string = params['url'];
325+
// console.log(fields);
327326

328-
var request = new XMLHttpRequest();
329-
request.open('get', url);
327+
let encodedParams: string[] = [];
328+
for (let fieldName in fields) {
329+
let encodedParam = encodeURIComponent(fieldName) + '=' + encodeURIComponent(fields[fieldName]);
330+
encodedParams.push(encodedParam);
331+
}
332+
let payload = encodedParams.join('&');
333+
// console.log(payload);
334+
335+
return new Promise((ok, reject) => {
336+
let request = new XMLHttpRequest();
337+
338+
if (params.type === 'Post') {
339+
let postData = new FormData();
340+
for (let fieldName in fields) {
341+
postData.append(fieldName, fields[fieldName]);
342+
}
343+
request.open('post', url);
344+
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
345+
request.send(payload);
346+
} else {
347+
request.open('get', url + '?' + payload);
348+
request.send();
349+
}
330350

331351
request.onload = e => {
332352
if (request.status >= 200 && request.status < 300) {
@@ -348,8 +368,6 @@ export class MvcValidationProviders {
348368
data: request.responseText
349369
});
350370
};
351-
352-
request.send();
353371
});
354372
}
355373
}

0 commit comments

Comments
 (0)