Привязка модели к списку<> при публикации объекта данных JavaScript

StackOverflow https://stackoverflow.com/questions/2402434

Вопрос

Я пытаюсь опубликовать объект данных 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

При этом и сайт, и панель правильно создаются и связываются со своими данными, но объект List имеет значение null.

public JsonResult Edit(Site site, Panel panel, List<ConfiguredFactsheet> configuredFactsheets)
{
    // do stuff
    return Json(success);
}

Теперь я понимаю, что свойство ConfigurationFactsheetId моего объекта «данные» представляет собой просто массив значений идентификаторов.Нужно ли указывать, что каждое значение соответствует свойству configuredFactsheetId моего объекта ConfigurationFactsheet?Если да, то мой объект данных примет форму, аналогичную

data
 - panelId
 - siteId
 - ConfiguredFactsheet // this is an array of CheckBox ids that correspond to ConfiguredFactsheets
   - ConfiguredFactsheetId:123
   - ConfiguredFactsheetId:234
   - ConfiguredFactsheetId:345

но это, очевидно, не сработает, потому что каждый раз, когда я добавляю к объекту новый ConfigurationedFactsheetId, он просто перезаписывает предыдущий.

Я знаю, что смогу это сделать, если построю строку запроса вида

"&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