【问题标题】:Why the second parameter value is always null in action method?为什么action方法中的第二个参数值始终为null?
【发布时间】:2019-09-11 10:08:43
【问题描述】:

action 方法的第二个参数值始终为 null。在 uri 中,查询字符串包含状态和类型的值。但我只能为状态获得价值。类型参数始终为空。

我已经尝试过这个问题中回答的属性路由。 https://stackoverflow.com/a/22962461/8155033

我添加了 [Route("Vehicles")] [Route("Vehicles/{status}/{type}")] 属性路线,如该答案中所述。它与 https://localhost:44355/Vehicles/8481aaed-13f8-4eee-921b-20853ab9ddf0/c07f4dd0-44d2-4c82-b174-76849d010c95%2F

但不是 https://localhost:44355/Vehicles?status=8481aaed-13f8-4eee-921b-20853ab9ddf0&type=c07f4dd0-44d2-4c82-b174-76849d010c95%2F

车辆控制器

   public async Task<IActionResult> Index(Guid? status, Guid? type )
   {
            var applicationDbContext = _context.Vehicles.Where(v=> v.VehicleStatusId == status && v.VehicleTypeId == type).Include(v => v.VehicleStatus).Include(v => v.VehicleType);
            return View(await applicationDbContext.ToListAsync());
   }

我想使用它来获取参数的值。 https://localhost:44355/Vehicles?status=8481aaed-13f8-4eee-921b-20853ab9ddf0&type=c07f4dd0-44d2-4c82-b174-76849d010c95%2F

它获取状态的值,但类型始终为空。

当我按下提交按钮时,我得到了上面的查询字符串。

<div>
    <form name="searchbox">
        <div class="form-group">
            <div class="form-group">
                @{
                    var vStatuses = ViewBag.vStatuses as ICollection<VehicleStatus>;
                    foreach (var vStatus in vStatuses)
                    {
                        <input type="radio" name="status" value=@vStatus.Id />
                        @vStatus.Label
                    }
                }

            </div>
            <div class="form-group">
                @{
                    var vTypes = ViewBag.vTypes as ICollection<VehicleType>;
                    foreach (var vType in vTypes)
                    {

                        <input type="radio" name="type" value=@vType.Id/>
                        @vType.Label
                    }
                }
            </div>
        </div>
        <input class="btn" type="submit" />
    </form>
</div>

【问题讨论】:

  • 如果最后去掉 %2F 会怎样?
  • 第二个查询字符串值不是有效的 Guid
  • @NineBerry 你知道为什么会这样吗?当我按下提交按钮时,我将这些值作为单选按钮我得到了这个查询字符串
  • 如果你能分享minimal reproducible example,那就太棒了。
  • 如果在/前面加一个空格会怎样?

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


【解决方案1】:

原因是type参数值不是有效的guid格式

您可以通过下面的链接查看它

Parse Guid

如果您删除 %2F,它会成功!

【讨论】:

  • 当我删除 %2F 时它可以工作。我更新了问题,很高兴知道为什么会发生这种情况
  • 我告诉过你!
  • 是的,正如你和@NineBerry 所说的
猜你喜欢
  • 2019-08-11
  • 2022-01-06
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
  • 2013-04-13
相关资源
最近更新 更多