解决视图中的部分/不完整路由

Posted

技术标签:

【中文标题】解决视图中的部分/不完整路由【英文标题】:Resolve a partial/incomplete Route in a View 【发布时间】:2020-08-21 13:47:22 【问题描述】:

我有一个位于 /api/Test/Foo/1234 的 API 控制器

[Area("Api")]
[ApiController]
[Route("/api/[controller]/[action]")]
public class TestController : ControllerBase

    [HttpGet("id", Name= "TestRouteName")]
    public IActionResult Foo(int id)
       
        ....
    

在一个视图中,我可以正确地将这个 URL 解析为 @Url.RouteUrl("TestRouteName", new id = 1234 )/api/Test/Foo/1234

有没有办法让我只返回/api/Test/Foo/(稍后由 javascript 使用)?

我试过@Url.RouteUrl("UserProfile") 但这会返回一个空字符串,@Url.Action("Foo", "Test", new area = "api" 返回/Test/Foo?area=api

【问题讨论】:

【参考方案1】:

问题是“id”的默认路由实际上是将其添加到 url,而不是使用它作为查询参数。试试下面的方法。

控制器

    [HttpGet(Name = "TestRouteName")]
    public IActionResult Foo(int id)
    
        .........
    

查看

    @(Url.RouteUrl("TestRouteName"))

访问视图的网址

    api/Test/Foo?id=1234

或者您可以使用以下内容来获得您想要的。

    @(Url.Action("Foo", "Test"))

【讨论】:

【参考方案2】:

为了不为您的路由参数id 提供任何内容(null),您应该在名称(reference)后面加上问号?

[HttpGet("id?", Name= "TestRouteName")]
public IActionResult Foo(int id)
   
    ....

但请注意,如果您不将 int id 参数设为可为空,则在访问路由时,id 的默认值将是 0

【讨论】:

以上是关于解决视图中的部分/不完整路由的主要内容,如果未能解决你的问题,请参考以下文章

laravel 视图

ALM路由接口开发--部分问题与解决方法

Ajax POST 返回 Bootstrap 面板主体内的完整部分视图

Ajax 帖子的成功部分无法在完整日历代码中运行

如何在没有代码的情况下隐藏 Android 布局 xml 中的部分可见视图?

如何制作完整部分的 youtube 视频背景封面