Попробуйте опубликовать их как JSON.
Начните с определения модели представления:
public class MyViewModel
{
public int SettingID { get; set; }
public List<SelectListItem> Items { get; set; }
}
, затем измените действие контроллера, чтобы принять эту модель представления в качестве аргумента:
[HttpPost]
public ActionResult SaveList(MyViewModel model)
{
// blah...
}
и, наконец, в вашем скрипте:
var items = $('#listItems > option').map(function ()
{
var arr = [];
arr.push({ value: $(this).val(), text: $(this).text() });
return arr;
}).get();
$.ajax({
type: 'POST',
url: '/CompanyAdmin/SaveSettingList/', // <-- use an URL Helper to generate this url instead of hardcoding it or you will cry when you deploy your application into a virtual directory
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({
items: items,
settingID: SettingID
}),
success: function (msg) {
alert(msg);
}
});
И если вы хотите использовать метод JSON.stringify
в старых браузерах, в которых он не поддерживается изначально, убедитесь, что вы включили json2.js script.
Все это, как говорится, я вижу, куда вы идете с этим действием контроллера и с этим запросом AJAX, и я должен сказать, что я не буду делать это таким образом (отправьте опции в запросе).Я имею в виду, чтобы сделать это представление, вы взяли этот список откуда-то?Предположительно, хранилище данных?Поэтому вместо того, чтобы бороться с HTML <form>
(который отправляет на сервер только выбранное значение раскрывающегося списка при отправке), почему бы вам просто не использовать это же хранилище данных в действии SaveList
, чтобы получить эти самыетакие же варианты?Это позволит вам избежать их обхода и сэкономит пропускную способность.Не волнуйтесь, базы данных работают быстро.А если их нет, просто кешируйте результаты дорогих запросов.
Полностью игнорируйте мое предыдущее замечание, если эти параметры могут быть изменены на стороне клиента, и вы хотите получить новые значения.