SQL Server引发错误:数据为空。不能在Null值上调用此方法或属性

时间:2019-01-22 17:11:24

标签: c# sql-server model-view-controller asp.net-core

我遇到这种情况,我正在尝试调用存储过程以返回任务列表,其中ProjectId为空。我测试了存储过程,它正在工作,但是在代码上却没有。我在做什么错了?

视图:

@foreach (var item in Model.Tasks)
    {
        @if (item.ProjectId == null)
        {
            <tr data-toggle="RecEdit" data-url="@(Url.Action("Edit") + "/" + item.TaskId)">
                <td style="width: 20%">@item.Title</td>
                <td style="width: 20%">@item.Description</td>
            </tr>
        }

    }

这是模型类:

public class CreateTaskVM
{
    public Task task {get; set;}
    public ICollection<Task> Tasks { get; set; }
    public ICollection<Project> projects {get; set;}
    public ICollection<Employee> Employees { get; set; }
    public ICollection<ProjectStatus> StatusTypes { get; set; }
}

这是我的控制器:

public IActionResult RecTask()
{
        CreateTaskVM mytasks = new CreateTaskVM();

        var param = new SqlParameter("@ProjectId", "Null");
        mytasks.Tasks = context.Task.FromSql($"EXEC [dbo].[uspGET_Tasks] @ProjectId", param).ToList();

        return View(mytasks);
}

我也尝试在Identity中执行此操作,但由于某些原因,MV空了。我只想显示一个值为ProjectId为空的任务列表。

先谢谢了。

2 个答案:

答案 0 :(得分:3)

SqlParameter包含字符串"Null"

如果要将空值发送到存储过程,请尝试使用DBNull.Value

var param = new SqlParameter("@ProjectId", DBNull.Value);

答案 1 :(得分:-1)

您必须将属性“ projectId”设置为可为空的属性。