نموذج ربط إلى قائمة <> عند نشر كائن بيانات JavaScript
-
18-09-2019 - |
سؤال
أحاول نشر كائن بيانات JavaScript بما يلي:
$.post(frm.attr("action"), data, function(res)
{
// do some stuff
}, "json");
حيث يأخذ "البيانات" هيكل
data
- panelId
- siteId
- ConfiguredFactsheetId // this is an array of CheckBox ids that correspond to ConfiguredFactsheets
- 123
- 234
- 345
مع هذا، يتم إنشاء مثيل لكل من الموقع واللوحة بشكل صحيح وملزم ببياناتهم ولكن كائن القائمة فارغ.
public JsonResult Edit(Site site, Panel panel, List<ConfiguredFactsheet> configuredFactsheets)
{
// do stuff
return Json(success);
}
الآن، أدرك أن خاصية تكوين كائن بيانات "البيانات" هي مجرد مجموعة من قيم المعرف. هل أحتاج إلى تحديد أن كل قيمة تتوافق مع خاصية ConfignatedShetShetIS لكائن My CodfactShetShet؟ إذا كان الأمر كذلك، فإن كائن البيانات الخاص بي سيستغرق نموذجا SIMILART
data
- panelId
- siteId
- ConfiguredFactsheet // this is an array of CheckBox ids that correspond to ConfiguredFactsheets
- ConfiguredFactsheetId:123
- ConfiguredFactsheetId:234
- ConfiguredFactsheetId:345
ولكن من الواضح أن هذا لن يعمل لأنه في كل مرة أضيف فيها تكوينا جديدا إلى الكائن، فسوف يقوم فقط بالكتابة فوق الوحدة السابقة.
أعلم أنني أستطيع القيام بذلك إذا قمت ببناء سلسلة الاستعلام من النموذج
"&ConfiguredFactsheet[i].configuredFactsheetId = " + configuredFactsheetId;
ولكن أود أن يحتوي على كل شيء في كائن بيانات واحد
أي اقتراحات؟ هل أحتاج إلى شرح أي شيء (ربما كل شيء!) أكثر وضوحا؟
شكرا
ديف
المحلول
في النهاية، هذا عملت:
var valuesArray = objCheckBoxes.map(function()
{
return $.getAttributes($(this));
});
var obj = new Array();
$.each(valuesArray, function(item) { obj.push($(this)[0]); });
$.each(obj, function(i)
{
// basically I take the rule where you need to append
// the index to the type, and I apply it here.
data["configuredFactsheets[" + i + "].configuredFactsheetId"] = $(this).attr("configuredFactsheetId");
});
ملاحظة: اقرأ عن $ .getattributes.
نصائح أخرى
بديل هو النشر:
?myValues=1&myValues=2&myValues=3
وقبولها كملقم Ienumerable
public ActionResult DoSomething(IEnumerable<int> myValues) {
...