【问题标题】:Asp-route-id: passed integer becomes 0asp-route-id:传递的整数变为0
【发布时间】:2020-09-23 08:25:41
【问题描述】:

我有以下问题。 我有一个产品,我对其进行了一些测试。 在我的 cshtml 页面中,我展示了一些产品项目的测试运行,如下所示:

<td><a asp-action="TestDetail" asp-route-id="@Model.ResultViewModels[i].TestRunId">Content</a></td>

TestRunId 是一个整数。例如,TestRunId 可能是 9。这有效:URL 看起来正确。 在我的cshtml页面中,用户可以点击这个,查看更多细节。

但是,当我在控制器中记录 asp-route-id 时,这个 TestRunId 似乎“丢失”了。在下面的示例中,第二个日志记录显示testrunId: 0。我希望这也是 9。

        public IActionResult TestPlanRunDetail(int TestRunId)
        {
            logger.LogInformation("TestPlanRunDetail function called.");
            logger.LogInformation("TestRunId: " + TestRunId);
            // Omitted for brevity
            return View(detail);
        }

【问题讨论】:

标签: asp.net asp.net-mvc asp.net-core


【解决方案1】:

asp-route-xxx中的参数名称必须与后端(int xxx)中的参数名称相同

所以,改变你的参数名称以匹配另一个

【讨论】:

    【解决方案2】:

    asp-route-{value}Anchor Tag Helper

    Anchor Tag Helper 通过添加新属性来增强标准 HTML 锚 (&lt;a ... &gt;&lt;/a&gt;) 标记。按照惯例,属性名称以asp- 为前缀。渲染的锚元素的href 属性值由asp- 属性的值决定。

    原因:

    占据{value} 占位符的任何值都被解释为潜在的路由参数

    因此,如果您使用asp-controller="controller" asp-action="action" asp-route-id="@Model.ResultViewModels[i].TestRunId"

    生成的 HTML href 将是 href="/controller/action?id=0"&gt;Content&lt;/a&gt; 其中0 是实际的@Model.ResultViewModels[i].TestRunId

    注意href中的参数名称是id而不是TestRunId

    你的TestPlanRunDetail(int TestRunId)TestRunId,而不是id,这就是你得到TestRunId=0 的原因。

    更简单的解决方案:

    asp-route-id 更改为asp-route-TestRunId(或asp-route-testrunid,因为它不区分大小写)。

    替代解决方案:

    Startup.Configure中定义一个默认路由模板:

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{action=Index}/{id?}");
    });
    

    在模型中:

    <a asp-action="TestDetail" 
       asp-route-id="@Model.ResultViewModels[i].TestRunId">
           Content
    </a>
    

    那么,生成的href 将是href="/TestDetail/12"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多