Razor Pages: передача более одного параметра во время навигации OnGetAsync - PullRequest
0 голосов
/ 20 октября 2018

Я работаю над проектом Razor Page, представляющим модели Lists и Records:

public class List
{
    public int ID { get; set; }

    [StringLength(25, MinimumLength = 3, ErrorMessage = "Title should be in range between 3 and 25")]
    [Display(Name = "Title")]

    public string Caption { get; set; }

    public string UserId { get; set; }
    public User User { get; set; }

    public ICollection<Record> Records { get; set; }
}

public class Record
{
    public int ID { get; set; }
    [StringLength(25, MinimumLength = 3, ErrorMessage = "Word should be in range between 3 and 25")]
    [Display(Name = "Title")]

    public string Word { get; set; }
    [StringLength(30, MinimumLength = 3, ErrorMessage = "Translation should be in range between 3 and 30")]
    public string Translation { get; set; }

    public int ListId { get; set; }
    public List List { get; set; }
}

Запись является дочерним элементом списка .Один ко многим в БД: enter image description here

Я создал правильный URL при открытии списка Records из Lists: enter image description here

Теперь я хочу создать аналогичный URL для одного Record, который выглядит следующим образом: enter image description here Однако для этого мне нужно правильно передать более одного параметра: ListIdи RecordId по csgtml файлу.Примерно так:

  <a asp-page="./Details" asp-route-id="@item.ID,@item.ListId">Details</a>

и подпись метода OnGetAsync в Записи / Детали (страница, на которой я хочу перейти) должны выглядеть так:

 public async Task<IActionResult> OnGetAsync(int? id, int? listId) {...}

Определение страницы вRecords/Details.cshtml должно выглядеть примерно так:

@page "/Lists/{listId}/Records/{id}/Details/"

Но это не работает!

Если я определю @page Records/Details.cshtml следующим образом:

@page "/Lists/{id}/Records/Details/"

Метод

 public async Task<IActionResult> OnGetAsync(int? id, int? listId)

доходит до точки останова, однако оба параметра имеют значение NULL и URL выглядит следующим образом: enter image description here

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Если вам нужно указать несколько значений маршрута, вы можете использовать атрибут asp-all-route-data в помощнике тега привязки:

@{   
    var routeValues = new Dictionary<string, string>
        {
           { "listId", item.ListId },
           { "id", item.ID }
        };
}

<a asp-page="./Details" asp-all-route-data="routeValues">Click</a>
0 голосов
/ 20 октября 2018

Вы почти готовы с этим, но вам нужно разделить эти параметры маршрута и использовать что-то вроде этого:

<a asp-page="./Details" asp-route-id="@item.ID" asp-route-listId="@item.ListId">Details</a>

Вы используете asp-route-*, чтобы установить свои параметры,где * представляет имя самого параметра и используется для каждого отдельного параметра.

...