我使用 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() ;
}
我确信可以提供从父模型 List
到 Record
的子项列表的导航。
所需的 URL 应该是这样的:
我相信有人遇到过同样的问题并解决了这个问题! 如果有任何帮助或建议,我将不胜感激。
最佳答案
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/