У меня есть модель представления с вложенным Size
объектом:
public class RedirectViewModel
{
public Size Size { get; set; }
}
Размер класса:
public class Size
{
public int Height { get; set; }
public int Width { get; set; }
}
Мне бы хотелось, чтобы свойства объекта Size
были заполнены значениями маршрута, которые я передаю с помощью перенаправления.
public class HomeController : Controller
{
public IActionResult Index()
{
return RedirectToAction(nameof(Redirect), new { Size = new { Width = 20, Height = 40 } } );
}
public IActionResult Redirect([FromRoute] RedirectViewModel viewModel)
{
return View(viewModel);
}
}
Из этого я получаю URL-адрес перенаправления с параметрами запроса:
? Размер =% 7B% 20Width% 20% 3D% 2020,% 20Height% 20% 3D% 2040% 20% 7D
какой URL-адрес декодируется:
? Размер = {Ширина = 20, Высота = 40}
Да, пробелы тоже есть, я не добавил их для ясности.
К сожалению, это не работает. Свойства не заполнены. Но если я вручную введу параметры, написанные таким образом:
* 1 028 *? Size.Width = 20 & Size.Height = 40
тогда связыватель модели успешно распознает их и в результате установит соответствующие свойства, в отличие от упомянутого ранее URL.
Я не хочу настраивать параметры запроса вручную, чтобы он работал.
Вопрос
Как построить значения маршрута для свойств вложенного объекта, чтобы связыватель модели распознал их?
EDIT:
Чтобы облегчить понимание моей проблемы, я не использовал точные объекты, которые использовал. Структура Size , которую я использовал в исходном примере кода, как-то неправильно связывалась, поэтому я тоже изменил свой собственный класс, который ближе к исходному сценарию. Извиняюсь за это, я должен был проверить это прежде, чем отправить вопрос. Первоначальный вопрос остается без изменений.
РЕДАКТИРОВАТЬ # 2:
Я нашел похожий вопрос для ASP.NET MVC 5. @ ant-p answer предлагает использовать RouteValueDictionary и затем передавать его в значения маршрута. Это не идеально, потому что это включает в себя ручную запись имен свойств, которые не должны быть связаны с использованием точного имени свойства, например при аннотировании FromQueryAttribute .