gpt4 book ai didi

c# - Razor 页面路由与 Web API 中的方式相同

转载 作者:太空宇宙 更新时间:2023-11-03 12:10:01 24 4
gpt4 key购买 nike

我使用 Razor Pages 创建了一个 Web 应用程序。我有 2 个具有一对多关系的模型:一个 List 可以容纳许多 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; }
}

我需要提供从 List 项到 Record 列表的导航,其方式与在 Web API 或 MVC 中可能实现的方式类似。在 Microsoft 文档中,我找到了有关 attributes in Web Api 的页面,我需要的行为:

[Route("customers/{customerId}/orders")]
public IEnumerable<Order> GetOrdersByCustomer(int customerId) { ... }

我需要这样的东西:

  [Microsoft.AspNetCore.Mvc.Route("Lists/{listId}/Records")]
public async Task GetRecordsByList(int listId)
{

var allRecords = await _context.Record.ToListAsync();

Record = allRecords.Where(w => w.ListId == listId).ToList() ;

}

我确信可以提供从父模型 ListRecord 的子项列表的导航。

UI 将是这样的:从列表 enter image description here

导航到记录: enter image description here

所需的 URL 应该是这样的:

enter image description here

我相信有人遇到过同样的问题并解决了这个问题!如果有任何帮助或建议,我将不胜感激。

最佳答案

Razor Pages 默认使用属性路由。路由是从各个页面的文件路径生成的。您可以为路由指定参数,但您可以通过将路由模板添加到 @page 指令来为特定页面执行此操作。

您显示的第一个页面可以是 Lists 文件夹中名为 Lists.cshtml 的页面或名为 Index.cshtml 的页面.无论哪种方式,它都将使用默认路由在 domain.com/lists 上可用。第二页可以是名为 Details.cshtml 的页面,其覆盖路由模板为 "/Lists/{listid}/Records":

@page "/Lists/{listid}/Records"

或者您可以使用 Startup 中的 AddPageRoute 方法添加另一个可以到达索引页面的路由:

services.AddMvc().AddRazorPagesOptions(options =>
{
options.Conventions.AddPageRoute("/Lists/Index", "Lists/{listid}/Records");
});

尽管这需要索引中的代码来确定它是应该显示所有列表还是显示选定列表的详细信息。

就我个人而言,我推荐第一种方法。在 Razor Pages 中,您的目标应该是让每个页面只负责一项职责。

在此处查看有关 Razor Pages 路由的更多信息:https://www.learnrazorpages.com/razor-pages/routing

关于c# - Razor 页面路由与 Web API 中的方式相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52863354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com