Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 传递空参数_C#_Asp.net Mvc_Parameter Passing - Fatal编程技术网

C# 传递空参数

C# 传递空参数,c#,asp.net-mvc,parameter-passing,C#,Asp.net Mvc,Parameter Passing,我目前在这个问题上有些困难。我有一个不需要任何参数的方法,现在我需要添加一个参数,但我不想在调用该方法的所有不同位置添加参数。这是我目前的方法: private IEnumerable<SearchItems> GetItems(ItemDescriptionFormViewModel viewModel = null) { IOrderedQueryable<ItemDescription> items= _itemDescriptionRepo

我目前在这个问题上有些困难。我有一个不需要任何参数的方法,现在我需要添加一个参数,但我不想在调用该方法的所有不同位置添加参数。这是我目前的方法:

private IEnumerable<SearchItems> GetItems(ItemDescriptionFormViewModel viewModel = null)
    {
        IOrderedQueryable<ItemDescription> items= _itemDescriptionRepository.FindAll().OrderBy(
            c => c.Sort == null).ThenBy(
                c => c.Sort).ThenBy(c => c.Description);

        if(items.Count()==0)
            ModelState.AddModelError("", string.Format("No active {0} entered.", Kids.Resources.Entities.ItemDescription.EntityNamePlural));
       return
            _itemDescriptionRepository.FindAll().OrderBy(c => c.Description).Where(a=>a.IsActive == true || viewModel == null || a.ItemDescriptionId == viewModel.ItemDescriptionId).Select(
                c => new SearchItems {Text = c.Description, Value = c.ItemDescriptionId.ToString()});
    }
private IEnumerable GetItems(ItemDescriptionFormViewModel viewModel=null)
{
IOrderedQueryable items=\u itemDescriptionRepository.FindAll().OrderBy(
c=>c.Sort==null)(
c=>c.Sort),然后是(c=>c.Description);
如果(items.Count()==0)
ModelState.AddModelError(“”,string.Format(“未输入活动的{0})”,Kids.Resources.Entities.ItemDescription.EntityNamePlumal));
返回
_itemDescriptionRepository.FindAll().OrderBy(c=>c.Description)。其中(a=>a.IsActive==true | | | | viewModel==null | | a.ItemDescriptionId==viewModel.ItemDescriptionId)。选择(
c=>newsearchItems{Text=c.Description,Value=c.ItemDescriptionId.ToString()});
}
我尝试将null作为参数传递给调用此方法的其他位置,但出现了一个错误。如何使这个问题过载

目的:添加viewModel的目的是因为我有一个包含活动项的下拉列表可供选择。一旦用户选择了一个活动项,然后由于某种原因该项变为非活动项,用户就会去编辑他们的选择。在下拉列表中,应该有活动项目的列表,以及当前处于非活动状态的先前选定项目。我正在使用ViewModel检查以前所选项目的id

谢谢

像这样声明:

private IEnumerable<SearchItems> GetItems(ItemDescriptionFormViewModel viewModel = null) 
这将允许您使用
GetItems()
GetItems(ItemDescriptionFormViewModel viewModel)


编辑:忽略?由于ItemDescriptionFormViewModel是一个类

,因此在此处取消对空引用的引用:

_itemDescriptionRepository.FindAll()
    .OrderBy(c => c.Description)
    .Where(a=>a.IsActive == true || 
        a.ItemDescriptionId == viewModel.ItemDescriptionId) // if viewModel null, this throws
    .Select(c => new SearchItems 
    {
        Text = c.Description, Value = c.ItemDescriptionId.ToString()
    });
因此,如果视图模型为空,您可以更新
Where()
子句以添加pass:

...
.Where(a => a.IsActive || viewModel == null || viewModel.ItemDescriptionId == a.ItemDescriptionId)
然后可以安全地将
null
作为参数传递,甚至可以创建一个默认参数值,因此如果没有传递任何参数,它将假定
null


当然,这是假设
itemscriptionformviewmodel
是一个类,如果它是一个结构,那么您必须使其为空
itemscriptionformviewmodel?

如果您想保留这两个方法(我是说GetItems()和GetItems(viewModel)),它们将自动重载

如果需要第二种方法,可以像这样传递参数

 private IEnumerable<SearchItems> GetItems(ItemDescriptionFormViewModel? viewModel)
private IEnumerable GetItems(ItemDescriptionFormViewModel?viewModel)

现在,您可以将null作为其参数传递。

您可以将默认值指定给
viewModel

private IEnumerable<SearchItems> GetItems(
    ItemDescriptionFormViewModel viewModel = null)
{
    if (viewModel == null) 
        viewModel = new ItemDescriptionFormViewModel();
private IEnumerable GetItems(
ItemDescriptionFormViewModel(viewModel=null)
{
if(viewModel==null)
viewModel=新的ItemDescriptionFormViewModel();


这样,如果您只需调用
GetItems()
,它将
viewModel
视为
newitemsdescriptionformviewmodel()

所有人……感谢所有帮助和努力试图解决这个问题。我终于能够解决这个问题,下面是我解决问题的人:

@Amina:null是viewModel参数的有效值吗?@Dennis我有这样的参数:ItemDescriptionFormViewModel viewModel=null。ItemDescriptionFormViewModel是类吗还是结构?@JamesMichaelHare ItemDescriptionFormViewModel是一个类…我目前正在测试建议的更改。只有
ItemDescriptionFormViewModel
是一个值类型,即一个结构。此外,您还需要记得检查
viewModel.HasValue
,如果返回true,您可以使用
viewModel.value访问它的值de>。这对我不起作用,因为ItemDescriptionFormViewModel是一个类。当我尝试此操作时,我得到了以下错误:“viewModel”的默认参数值必须是编译时常量,所以我认为您必须使用默认值
ItemDescriptionFormViewModel viewModel=null
,并在比较值时测试null情况。我在其他人也建议使用ch,但现在我得到的对象引用未设置为对象错误的实例。:D错误消息已消失,但我没有得到我想要的结果。使用ViewModel的整个想法是检查以前所选项目的id,并在编辑页面上填充所选项目,但cur通常,它不会显示所选项目,因为我在选择该项目后使其处于非活动状态。其目的是一旦用户选择了一个项目,然后该项目变为非活动状态,当用户编辑该项目时,它会在下拉列表中显示活动项目以及他以前选择的非活动项目。我认为您没有获得正确答案的原因是:结果是,由于您创建了一个
新的ItemDescriptionFormViewModel()
,ItemDescriptionID默认设置为0。在检查ID之前,需要先检查
ItemDescriptionID==0
,以执行该方法,就好像没有参数一样。尝试此操作时,我得到一个对象引用未设置为对象错误的实例。它引用的是我的.cshtml视图页面。您在哪个对象上获取该错误?是否在方法的其他位置使用viewModel?确切的行是:self.items=@Html.Raw(Json.Encode(Mode.items));在我目前使用的方法中,我唯一一次使用viewModel只是检查我当前代码中某个项目的Id。如果你只使用它来查找Id,你可以只传递一个int而不是整个viewModel。此外,你是否进行了null检查?这对于不带参数调用它很重要。当我调整代码时,我得到对象引用未设置为“我的.cshtml视图”页上对象错误的实例。@阿米娜:在哪一行?这是您使用viewModel的唯一位置。您能用最新代码更新您的问题吗
private IEnumerable<SearchItems> GetItems(
    ItemDescriptionFormViewModel viewModel = null)
{
    if (viewModel == null) 
        viewModel = new ItemDescriptionFormViewModel();