Оказывается, причиной проблемы была кодировка символов.Мой пользовательский механизм связывания создан для обработки свойств словаря.
Моя модель выглядит примерно так:
public class EditModel
{
public string Name { get; set; }
public Dictionary<int, string> Type { get; set; }
}
Как указано в моем вопросе, метод контроллера выглядит следующим образом:
[HttpPost]
public bool AsyncUpload(EditModel model)
{
if (Request.Files.Count <= 0)
return false;
return true;
}
На стороне клиентаУ меня есть текстовые поля управления и флажки.Текстовые поля отображаются на свойства строки.Флажки будут сопоставлены со свойствами словаря и будут иметь такие имена, как «Тип [0]», «Тип [7]» и т. Д., Которые я анализирую с помощью своего пользовательского связывателя модели, чтобы извлечь ключ из скобок.
Теперь все работает, как и ожидалось, при вызове функции jQuery
$.get('AsyncUpload', $('#uploadform').serialize());
Поскольку строка запроса, отправляемая в контроллер,
http://127.0.0.1/Home/AsyncUpload?Name=John&Type%5B0%5D
Тип% 5B0% 5D декодируется в Тип[0].MVC признает это как словарь, и мы готовы к гонкам.
Передача уже закодированной строки в функцию addFostParam SWFUpload была проблемой.Он принимал значение, которое я устанавливал, которое было «Тип% 5B0% 5D» и кодировало «%» в% 25.Таким образом, строка запроса из SWFUpload была:
http://127.0.0.1/Home/AsyncUpload?Name=John&Type%255B0%255D
Тип затем был декодирован как Тип% 5B0% 5D, который MVC не распознал как словарь.Имя будет установлено правильно, потому что связыватель модели по умолчанию знает, как обращаться с простым строковым свойством.
Чтобы устранить эту проблему, я внес следующие изменения в свой JavaScript.Он заменит кодировку скобок фактическими скобками.Затем они будут закодированы обратно при вызове на сервер, и все будет хорошо со вселенной.
for (key in res) {
var value = res[key];
var fixedKey = key;
fixedKey = fixedKey.replace('%5B', '[');
fixedKey = fixedKey.replace('%5D', ']');
swfu.addPostParam(fixedKey, value);
}
Большое спасибо Мэтью Эбботу, который прокомментировал мой пост, что заставило меня еще раз взглянуть наимена передаются на сервер.Вы спасли мое здравомыслие.