سؤال

أحاول نشر كائن بيانات 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) {
    ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top