【问题标题】:Razor Pages: passing more than one parameter to while navigation OnGetAsyncRazor Pages:在导航 OnGetAsync 时传递多个参数
【发布时间】:2019-03-24 20:01:48
【问题描述】:

我从事 Razor Page 项目,该项目代表模型 ListsRecords

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; }
}

RecordList 的子项。 DB中的一对多:

我在从Lists 打开Records 列表时构建了有效的网址:

现在我想为单个 Record 构建类似的 URL,如下所示: 但是,要做到这一点,我需要通过csgtml 文件正确传递多个参数:ListIdRecordId。像这样的:

  <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)

转到断点,但是,两个参数都是空值,URL 看起来像这样:

【问题讨论】:

    标签: c# asp.net-core razor-pages


    【解决方案1】:

    你几乎已经完成了,但你需要拆分这些路由参数并使用如下内容:

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

    您使用asp-route-* 设置参数,其中* 表示参数本身的名称,用于每个单独的参数。

    【讨论】:

    • docs 中有报道。
    【解决方案2】:

    如果需要指定多个路由值,可以使用锚标签助手上的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>
    

    【讨论】:

      猜你喜欢
      • 2020-12-24
      • 2020-05-10
      • 2019-08-26
      • 2020-04-21
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      相关资源
      最近更新 更多