如何创建一个空的SelectList

时间:2014-07-16 10:49:00

标签: c# asp.net asp.net-mvc linq

我有以下行动方法:

public JsonResult LoadSitesByCustomerName(string customername)
{
    var customerlist = repository.GetSDOrg(customername)
                                 .OrderBy(a => a.NAME)
                                 .ToList();
    var CustomerData;
    CustomerData = customerlist.Select(m => new SelectListItem()
    {
        Text = m.NAME,
        Value = m.NAME.ToString(),
    });
    return Json(CustomerData, JsonRequestBehavior.AllowGet);
}

但目前我在var CustomerData;上收到以下错误:

implicitly typed local variables must be initialized

所以我不知道如何创建一个空的SelectList来将其分配给var变量? 感谢

6 个答案:

答案 0 :(得分:12)

使用此选项可创建空的SelectList

new SelectList(Enumerable.Empty<SelectListItem>())

Enumerable.Empty<SelectListItem>()创建一个空序列,将传递给SelectList的构造函数。这是必要的,因为SelectList没有没有参数的构造函数重载。

答案 1 :(得分:7)

你可以尝试这个:

IEnumerable<SelectListItem> customerList = new List<SelectListItem>();

你得到的错误是合理的,因为

  

var关键字指示编译器从初始化语句右侧的表达式推断变量的类型。

另一方面,您可以尝试以下方法:

var customerList = customerlist.Select(m => new SelectListItem()
                   {
                       Text = m.NAME,
                       Value = m.NAME.ToString(),
                   });

第二个赋值的工作原理是,编译器可以通过这种方式推断变量的类型,因为它知道LINQ查询的类型返回。

答案 2 :(得分:4)

该错误意味着您无法在不提供值的情况下声明var变量,例如:

var double1 = 0.0; // Correct, compiler know what type double1 is.
var double2; // Error, compiler not know what type double2 is.

您需要为var CustomerData;分配一个值,例如:

var CustomerData = customerlist.Select(m => new SelectListItem()
            {
                Text = m.NAME,
                Value = m.NAME.ToString(),

            });

答案 3 :(得分:4)

试试这个:

customerlist = new[] { new SelectListItem { } };

答案 4 :(得分:2)

声明变量时初始化变量:

var CustomerData = customerlist.Select(m => new SelectListItem()
{
    Text = m.NAME,
    Value = m.NAME.ToString(),
});

答案 5 :(得分:1)

空列表项,默认为

var area = new[] { new tbl_Area { AreaID = -1, AreaName = "Please Select Main Area" } };

tbl_Area可以是类或数据模型

 class tbl_Area{
      public int AreaID {get;set;}
      public string AreaName {get;set;}
 }