كيف يمكنني استدعاء إجراء وحدة تحكم مباشرة من وظيفة JavaScript.
-
08-07-2019 - |
سؤال
لدي الرمز التالي الذي يعرض نموذج مربع حوار jQuery UI مع بيانات للمستخدم لإدخال:
$("#dialog").dialog({
bgiframe: true,
autoOpen: false,
height: 300,
modal: true,
buttons: {
'Create an account': function() {
var bValid = true;
allFields.removeClass('ui-state-error');
bValid = bValid && checkLength(name, "username", 3, 16);
bValid = bValid && checkLength(email, "email", 6, 80);
bValid = bValid && checkLength(password, "password", 5, 16);
bValid = bValid && checkRegexp(name, /^[a-z]([0-9a-z_])+$/i, "Username may consist of a-z, 0-9, underscores, begin with a letter.");
// From jquery.validate.js (by joern), contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
bValid = bValid && checkRegexp(email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "eg. ui@jquery.com");
bValid = bValid && checkRegexp(password, /^([0-9a-zA-Z])+$/, "Password field only allow : a-z 0-9");
if (bValid) {
$('#users tbody').append('<tr>' +
'<td>' + name.val() + '</td>' +
'<td>' + email.val() + '</td>' +
'<td>' + password.val() + '</td>' +
'</tr>');
$(this).dialog('close');
}
},
Cancel: function() {
$(this).dialog('close');
}
},
close: function() {
allFields.val('').removeClass('ui-state-error');
}
});
إذا رأيت ، فإنه يدعو هذا الرمز عند النجاح:
if (bValid) {
$('#users tbody').append('<tr>' +
'<td>' + name.val() + '</td>' +
'<td>' + email.val() + '</td>' +
'<td>' + password.val() + '</td>' +
'</tr>');
$(this).dialog('close');
}
بدلاً من الالتزام في HTML داخل الصفحة الحالية ، أريد الحصول على جميع الحقول وإرسالها إلى إجراء وحدة تحكم. أي اقتراح حول كيف يمكنك بناء إجراء وحدة تحكم مباشرة من JavaScript؟
المحلول
يمكنك عمل وحدة تحكم بالطريقة التي تقوم بها عادة ، وإرجاع النص الخام عن طريق الاتصال Content
طريقة. (يمكنك أيضًا إرجاع JSON أو JavaScript أو عرض أو أي شيء آخر)
يمكنك استدعاء الإجراء باستخدام jQuery Ajax ، مثل هذا:
$.post('/controller/action/whatever', { name: name.val(), email: email.val(), password: password.val() });
نصائح أخرى
استخدم jQuery للقيام بوستشور جزئي.
شيء من هذا القبيل؛
$.post("/Controller/jQueryMethod", { param: paramValue }, function(newCommentListHTML) {
//do something interesting with the html
});
النشر أعلاه paramter واحد. ثم يأخذ HTML المعاد تراجعه ، تم إنشاؤه في C# مع RenderPartial ويستخدمه لتقديم عنصر تحكم جزئي جديد.
لا تنتمي إلى StackOverflow