Будет ли модель ASP.NET MVC Model Binder сохранить размещенный массив в правильном порядке?
-
29-09-2019 - |
Вопрос
Таким образом, у меня есть множество чисел, которые я публикую в действие ASP.NET MVC, которое имеет параметр (целочисленного) списка (целочисленного), и все это отлично работает.
Мой вопрос:
Можно ли предположить, что в списке (целого числа) будут числа в том же порядке, что и в массиве, который я разместил?
Спасибо за ваше время!
РЕДАКТИРОВАТЬ:
Размещенные данные выглядят так:
Postdata = model.levelids = 6 & model.levelids = 19 & model.levelids = 16 & model.levelids = 21 & model.levelids = 18
Я использую Data Data Firefox, чтобы увидеть его.
Я использую jQuery, в традиционном режиме.
РЕДАКТИРОВАТЬ:
Действие выглядит примерно так:
public function Create(byval model as thecreateviewmodel) as actionresult
У TheCreatViewModel есть куча свойств, но интересный ...
Public Property LevelIdsAs IList(Of Integer) = New List(Of Integer)
На стороне клиента модель представления строится с JavaScript/jQuery:
function NewEntityDataBuilder() {
var theData = {
'model.Name' : $('#Name').val(),
'model.Description' : $('#Description').val(),
'model.LevelIds' : $('#LevelIds').val()
};
return theData;
}
Эта функция вызывается из этого бита JavaScript, который в основном проходит через и добавляет все вещи в списке в раскрывающий список (выберите «Контроль») и выбирает их все.
$('#LevelIds').empty();
$('#AddedLevels').children().each(function () {
$('#LevelIds').append("<option value='" + $(this).attr('LevelId') + "'>" + $(this).attr('LevelId') + "</option>");
});
$('#LevelIds').children().attr('selected', 'selected'); //select all the options so they get posted.
var dataToPost = NewEntityDataBuilder();
Это кажется довольно запутанным, когда это ставит таким образом, но на самом деле это довольно просто. Все это часть 2 списков подключенных перетаскивания, которые являются частью формы.
SO: если я помесчу значение списка выбора со всеми его параметрами, выбранными в переменной, и опубликую это в ILIST (из целого числа), они будут иметь их в том же порядке, что и в выборе. Похоже, они есть. Но это просто совпадение?
Решение
Обычно индекс является частью имени параметра:
ints[0]=0&ints[2]=2&ints[1]=1
И если у вас есть действие контроллера, которое выглядит так:
public ActionResult Index(List<int> ints)
{
// ints[0] = 0
// ints[1] = 1
// ints[2] = 2
return View();
}
ОБНОВИТЬ:
Предположим, что у вас есть несколько параметров с одним и тем же именем в строке запроса. Эта строка запроса будет проаналирована двигателем ASP.NET Httprequest объект быть преобразован в NamevalueCollection и точнее пользовательская реализация под названием HttpValueCollection
. Анкет Этот класс является внутренним для ASP.NET, что означает, что он не задокументирован и может измениться с версиями .NET. Глядя на это с помощью отражателя, есть FillFromString
и то, как он реализован, это, кажется, сохраняет порядок. Но это то, на что я бы не стал положиться.