首页 > 解决方案 > 可选参数必须是引用类型、可空类型或声明为可选参数。该怎么办?

问题描述

public ActionResult Applicant(int JobPostId)
{
    List<JobSeeker> jobSeekers = new List<JobSeeker>();
    var ApplicationList = db.JobApplications.Where(x => x.JobPostId == JobPostId).ToList();

    foreach(JobApplication app in ApplicationList)
    {
        jobSeekers.Add(db.Users.OfType<JobSeeker>().Single(x => x.Id == app.JobSeekerId));
    }
    // var JobseekerForJobPost = db.Users.OfType<JobSeeker>().Where(x => x.JobPostsAppliedFor.Any(y => y.JobPostID == JobPostId)).ToList();

    return View(jobSeekers);
}

@Html.ActionLink("View Applicants", "Applicant", new { id = item.JobPostID }) |


public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

我无法弄清楚为什么它给了我错误。

标签: c#

解决方案


您的操作方法有一个值类型参数 (an int):

public ActionResult Applicant(int JobPostId)

但是您没有为路线提供价值:

Html.ActionLink("View Applicants", "Applicant", new { id = item.JobPostID })

该错误告诉您必须为该参数提供一个值,因为int否则不能null。如果您希望此值可能为null,请将其设为可为空:

public ActionResult Applicant(int? JobPostId)

或者,如果它不应该为空,请为其提供一个值:

Html.ActionLink("View Applicants", "Applicant", new { JobPostID  = item.JobPostID })

(从您在该操作方法中对该值的使用来看,它看起来不应该null。但我想它可能在您的数据中。)


旁注:按照 C# 约定,变量应为小写:

public ActionResult Applicant(int jobPostId)

和:

Html.ActionLink("View Applicants", "Applicant", new { jobPostID  = item.JobPostID })

推荐阅读