Передать значение вложенному свойству через значения маршрута - PullRequest
0 голосов
/ 23 января 2019

У меня есть модель представления с вложенным 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 .

1 Ответ

0 голосов
/ 23 января 2019

Просто вы можете сделать следующее:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return Redirect(new Size() { Width = 20, Height = 40 } );
    }

    public IActionResult Redirect(Size size)
    {
        return View(size);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...