ASP.NET MVC 控制器方法接收对象的空实例而不是 null 值,为什么?

问题描述 投票:0回答:1

我已经 - 正式表达 - ASP.NET MVC 项目中的

IActionResult Index(object? obj)
控制器方法。如果我在没有任何路由值的情况下通过 Web 前端的主菜单调用它,它会生成输入参数的空对象而不是空值,但为什么呢?

简要说明:我的项目的一部分是员工管理系统。

Employees
的索引页面根据员工所属的区域显示员工列表。如果未选择区域,则显示所有员工。当第一次调用
Index
页面时,没有选择区域,因此我希望控制器方法中的变量具有值
null

具体而言,这意味着我的控制器方法如下所示(示例):

public IActionResult Index(Area? area)
{
    if (area == null)
    {
        return View();
    }
    else
    {
        return View(area.Id);
    }
}

以及对应的

Area
类,像这样:

public class Area
{
    public int Id { get; set; }
    public string Key { get; set; }
    public string? Name { get; set; }
    // ...
}

我通过以下方式调用

Index
方法:

<a class="nav-link" asp-controller="Employees" asp-action="Index">Employees</a>

因为没有路线值或类似的值。我希望控制器方法中的变量

area
==
null
。但它是一个空的
Area
对象,如下所示(同时我尝试定义一个默认值
 == null
。正如您在屏幕截图中看到的。但它也不起作用)

运行时面积值:

value of area at runtime

c# asp.net-mvc
1个回答
0
投票

Neil 的触发器给了我尝试通过路由值发送

null
值的想法。这也不起作用,但最终它给了我以下解决方法:

    public IActionResult Index(object? obj)
    {
        Area? area = null;
        if(obj is Area chkArea)
        {
            area = chkArea;
        }
        ...
    }

这个方法可行,但我真的不知道该怎么做。尽管如此,我认为它仍然比检查area.Id == 0更好,因为理论上可能存在ID == 0的区域...

感谢您的帮助

© www.soinside.com 2019 - 2024. All rights reserved.