#asp.net-core #asp.net-core-mvc #viewmodel #query-string #.net-5
#asp.net-core #asp.net-core-mvc #viewmodel #строка запроса #.net-5
Вопрос:
У меня есть действие post, которое в случае успеха заполняет новую модель представления : ConfirmationViewModel.cs
. Эта модель представления содержит вызываемое свойство Wings
, которое представляет собой не что иное, как словарь с int
типом ключа и List<string>
значением. После успешной передачи требуемых данных в эту модель представления действие перенаправляется на другое действие, передавая вместе с ним модель представления.
Однако, как вы можете видеть на изображении ниже, словарь не будет успешно заполнен в следующем запросе. Поэтому я подозревал, что что-то пошло не так в процессе привязки параметров строки запроса к модели представления.
Однако строка запроса показала реальную проблему:
https://localhost:44341/ShipRegistration/Confirmation?Hull=Neptunusamp;Engine=Galaxy Classamp;Wings=[1, System.Collections.Generic.List`1[System.String]]amp;Wings=[2, System.Collections.Generic.List`1[System.String]]amp;TotalWeight=908amp;TotalEnergy=186
, или URL-расшифрованный:
https://localhost:44341/ShipRegistration/Confirmation?Hull=Neptunusamp;Engine=Galaxy Classamp;Wings=[1, System.Collections.Generic.List`1[System.String]]amp;Wings=[2, System.Collections.Generic.List`1[System.String]]amp;TotalWeight=908amp;TotalEnergy=186
Каким-то образом значение вложенной коллекции неправильно передается в строку запроса. Вместо этого передается только тип объекта ( System.Collections.Generic.List
).
Я знаю, что использование сеансов сделало бы мою жизнь намного проще на данный момент, но использование сеансов или любой другой формы сохранения, к сожалению, не вариант для меня.
Надеюсь, кто-нибудь сможет мне в этом помочь.
Заранее спасибо,
Райан
Комментарии:
1. Полезен ли мой ответ?
Ответ №1:
Вот демонстрация для передачи словаря в строке запроса:
Контроллер:
public IActionResult TestDictionary(ConfirmationViewModel c)
{
return Ok();
}
ConfirmationViewModel :
public class ConfirmationViewModel
{
public Dictionary<int, List<string>> Wings { get; set; }
public string Engine { get; set; }
public string Hull { get; set; }
public int TotalEnergy { get; set; }
public int TotalWeight { get; set; }
}
Url:
https://localhost:xxx/xxx/xxx?Hull=Neptunusamp;Engine=Galaxy Classamp;TotalWeight=908amp;TotalEnergy=186amp;Wings.1=samp;Wings.1=ssamp;Wings.2=ramp;Wings.2=rr
Вы также можете использовать url, подобный этому:
https://localhost:xxx/xxx/xxx?Hull=Neptunusamp;Engine=Galaxy Classamp;TotalWeight=908amp;TotalEnergy=186amp;Wings[1]=samp;Wings[1]=ssamp;Wings[2]=ramp;Wings[2]=rr
или
https://localhost:xxx/xxx/xxx?Hull=Neptunusamp;Engine=Galaxy Classamp;TotalWeight=908amp;TotalEnergy=186amp;Wings[1][0]=samp;Wings[1][1]=ssamp;Wings[2][0]=ramp;Wings[2][1]=rr
Комментарии:
1. Боюсь, что нет. Вы указали, как должен выглядеть URL-адрес, но не обязательно, как его достичь. Тем временем я нашел обходной путь: я мог бы просто отобразить представление, фактически не отправляя новый запрос. Спасибо за ваше время и усилия и мои извинения за поздний ответ.