使用Guid作为可选参数给出的'参数需要类型为'System.Nullable'的值

本文关键字:参数 类型 的值 Nullable System Guid 使用 | 更新日期: 2023-09-27 18:03:46

我只是有帮助链接我的模型到我的视图模型在这个控制器-这似乎是有效的。下面是代码:

public ActionResult TechSearchKnowledgebase([Optional]Guid? createdById, [Optional]Guid? categoryId, [Optional]Guid? typeId)
        {
            var model = db.Knowledgebases.AsQueryable();
            if (createdById != Guid.Empty)
            {
                model = model.Where(k => k.CreatedById == createdById);
                ViewBag.CreatedBy = db.Users.Where(c => c.UserId == createdById).First().FullName;
            }
            if (categoryId != Guid.Empty)
            {
                model = model.Where(k => k.CategoryId == categoryId);
                ViewBag.Category = db.Categories.Where(c => c.CategoryId == categoryId).First().CategoryName;
            }
            if (typeId != Guid.Empty)
            {
                model = model.Where(k => k.TypeId == typeId);
                ViewBag.Category = db.Roles.Where(c => c.RoleID == typeId).First().RoleDescription;
            }
            model=model.OrderBy(k => k.CreatedDate);
            List<KnowledgebaseResult> knowledgebaseResults = Mapper.Map<List<KnowledgebaseResult>>(model.ToList());
            return View("TechKnowledgebaseList", knowledgebaseResults);
        }

我有一个问题的代码虽然:

如果我加载它,我得到这个错误:

parameters字典中包含一个无效的parameter条目方法System.Web.Mvc.ActionResult的'categoryId'TechSearchKnowledgebase(系统。可空的1[System.Guid], System.Nullable 1[系统。Guid)系统。可为空的1[System.Guid])' in 'HelpDesk.WebUI.Controllers.KnowledgebaseController'. The dictionary contains a value of type 'System.Reflection.Missing', but the parameter requires a value of type 'System.Nullable 1[System.Guid]。参数名称:parameters

使用Guid作为可选参数给出的'参数需要类型为'System.Nullable'的值

我不熟悉在您的TechSearchKnowledgebase方法中用于声明可选参数的语法。根据您想要做的事情,尝试以下操作之一:

1)移除[Optional]标签。你的方法看起来像这样:

TechSearchKnowledgebase(Guid? createdById, Guid? categoryId, Guid? typeId)

这些现在是可空的Guid参数,你可以调用这个方法作为TechSearchKnowledgebase(null, null, null);这满足你的需要吗?

2)如果你确实需要可选参数,请查看已命名参数和可选参数。您可以看到,可选参数都是在必需参数之后声明的,并且它们都指定了默认值。由于您正在使用Guid,我的猜测是您不希望这些真正成为可选参数,或者您希望指定Guid。默认值为空。如果后者为真,则方法定义如下:

public ActionResult TechSearchKnowledgebase(Guid? createdById = Guid.Empty, Guid? categoryId = Guid.Empty, Guid? typeId = Guid.Empty)

如果我误解了你的问题,请澄清并提供代码,你在哪里调用这个方法