MVC中的SelectList语法不正确

时间:2013-07-19 15:55:54

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

我在这里做错了什么?

我要做的是将一个函数值和函数名列表填充到一个jSon结果中,然后我将在我的主页上使用jQuery。

错误是:

  

错误5无法隐式转换类型   'System.Collections.Generic.IEnumerable'   到'System.Web.Mvc.SelectList'。存在显式转换(是你   错过演员?)

    public ActionResult FilterFunctionList(int departmentID = 0)
    {
        if (departmentID == 0)
        {
            return this.Json(string.Empty, JsonRequestBehavior.AllowGet);
        }
        IPACS_Departments ipacs_department = db.IPACS_Department.Find(departmentID);
        SelectList ipacs_functions = ipacs_department.IPACS_Functions.Select(m => new SelectListItem
        {
            Value = SqlFunctions.StringConvert((double)m.functionID).Trim(),
            Text = m.name
        });


        return this.Json(ipacs_functions, JsonRequestBehavior.AllowGet);
    }
    #endregion

2 个答案:

答案 0 :(得分:3)

尝试使用constructor of SelectList that takes an IEnumerable

SelectList ipacs_functions = new SelectList(
    ipacs_department.IPACS_Functions.Select(m => new SelectListItem {
        Value = SqlFunctions.StringConvert((double)m.functionID).Trim(),
        Text = m.name
    })
,   "Value"
,   "Text"
);

答案 1 :(得分:0)

dasblinkenlight 当然是正确的,但我更喜欢在后面的ViewModel代码中将这些集合定义为IEnumberable<SelectListItem>,以减少必须拥有那些神奇的“值”和“文本” “参数:

public int FavoriteMovieID { get; set; }

public IEnumerable<SelectListItem> MoviesToSelectFrom 
{
    get
    {
        return from x in OrderDetailsRepo.GetAllMovies()
                select new SelectListItem {
                    Text = x.Title,
                    Value = x.ID.ToString(),
                    Selected = x.id == this.FavoriteMovieID,
                };
    }
}
嘘,看起来有点清洁,恕我直言。在View方面,所有帮助方法只需要IEnumberable<SelectListItem>(SelectList实现!),所以它们看起来一样:

@Html.DropDownListFor(model => model.FavoriteMovieID, Model.MoviesToSelectFrom)
相关问题