【问题标题】:Routing missing URL link as parameters路由缺少 URL 链接作为参数
【发布时间】:2019-08-26 23:11:26
【问题描述】:

我需要我的 Web 应用程序根据 URL 中的乐队名称拉出一个乐队详细信息页面,而无需为每个乐队创建一个 cshtml 文件。例如, myurl.com/someband 我需要路由到 someband 页面,使用 someband 作为参数,而不是作为带有问号和 = 符号的查询字符串参数。

我的一个想法是更改 IIS 404 错误以路由到索引页面,并可能发送 url,然后将波段名称作为参数剥离。这听起来不太干净。

预期结果应该像 facebook.com/yourid 一样工作

【问题讨论】:

  • withou creating a cshtml file for every band. 是什么意思?不同波段的哪个 cshtml 填充返回。
  • @TaoZhou,在核心项目中,每个链接都有一个cshtml文件。例如,这里是示例隐私页面链接/cshtml。 //@page //@model PrivacyModel //@{ ViewData["Title"] = "Privacy Policy"; }

    @ViewData["Title"]

    使用此页面详细说明您网站的隐私政策。

    我不想为每个乐队生成一个新的 cshtml 页面,而是一个可重用页面来显示我从 SQL 中提取的乐队数据,但我希望链接是域名 + 乐队名称。
  • 检查更新答案。

标签: .net asp.net-core razor


【解决方案1】:

要从路由中解析参数,您可以尝试Route like

  1. 带有路由的控制器

    public class HomeController : Controller
    {
        [Route("{band}")]
        public IActionResult Band(string band)
        {
            ViewData["Band"] = band;
            return View();
        }        
    }
    
  2. 查看(主页/Band.cshtml)

    @{ 
        Layout = "";
    }
    <h1>@ViewData["Band"]</h1>
    

更新

您似乎正在使用 Razor 页面,请尝试以下步骤:

  1. PageModel

    public class IndexModel : PageModel
    {
        public string Band { get; set; }
        public void OnGet(string band)
        {
            Band = band;
        }
    }
    
  2. 查看

    @page "{band?}"
    @model IndexModel
    @{
        ViewData["Title"] = "Home page";
    }
    
    @Model.Band
    

【讨论】:

  • 这就是我想要的。在第一个示例中, ViewData["Band"] 抛出异常,因为它传递了一个空视图。第二个示例有效,但它是否将乐队页面加载到索引页面中?抱歉,我是 Razor 页面的新手,我正试图解决这个问题。另外,有没有办法整合部分加载,所以每次点击链接时页面都不会刷新?我的最终目标是在用户浏览网站时将音乐播放器保持在顶部。
  • @MotleyDrew ` 是把乐队页面加载到索引页面吗?` 是什么意思?路由和持久化音乐播放器有什么关系?
  • 在页面标题/菜单中播放歌曲的音乐播放器(基本 HTML5 音频)将在单击链接时停止播放。部分加载将允许播放器在点击链接时继续播放。
猜你喜欢
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
  • 2019-07-24
  • 2017-02-27
  • 2021-09-02
  • 2021-09-19
  • 2019-01-09
  • 2020-08-07
相关资源
最近更新 更多