假设ViewBag.oox 中有一个字符串列表,您应该在代码块之外调用DropDownList 方法。
您也不需要显式的List<string> 构造函数(不是您的下拉菜单不呈现的原因)。 Select 方法返回一个 IEnumerable,您可以将它用于辅助方法调用。
@{
List<string> oo = ViewBag.oox;
var obj = oo.Select(ch => new SelectListItem { Text = ch, Value = ch });
}
@Html.DropDownList("xyz", obj)
DropDownList 方法为 SELECT 元素标记返回 MvcHtmlString。当您在代码块中调用它时,您不会在任何地方使用该方法的输出。当您在带有 @ 前缀的代码块之外进行调用时,razor 将使用输出(HTML 标记)并使用它来呈现页面的特定部分。
因此,如果您出于好奇而绝对想调用代码块内的方法。您可以存储方法调用的结果并在外部使用它来呈现它。
@{
List<string> oo = ViewBag.oox;
var obj = oo.Select(ch => new SelectListItem { Text = ch, Value = ch });
MvcHtmlString selectMarkup = Html.DropDownList("xyz", obj);
}
@selectMarkup
理想情况下,您应该遵循第一种方法,在代码块之外调用该方法。
请记住,如果ViewBag.oox 返回一个意外的值,您的代码将在调用Select 方法时崩溃。所以在使用它之前做一个空检查是安全的。考虑使用强类型视图模型方法而不是 ViewBag/ViewData 来传输这些数据。