【发布时间】:2018-10-20 04:25:58
【问题描述】:
每当我尝试以下代码时,我的应用程序似乎都能正常工作:
查看:Index.cshtml
@{
List<SelectListItem> listItems = new List<SelectListItem>();
listItems.Add(new SelectListItem
{
Text = "Exemplo1",
Value = "Exemplo1"
});
listItems.Add(new SelectListItem
{
Text = "Exemplo2",
Value = "Exemplo2",
Selected = true
});
listItems.Add(new SelectListItem
{
Text = "Exemplo3",
Value = "Exemplo3"
});
}
@Html.DropDownList("name", listItems)
但我不希望这样的列表在视图中发生任何逻辑。相反,我希望控制器来处理这个:
控制器:SelectionController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace ExampleMVC.Controllers
{
public class SelectionController : Controller
{
// GET: Selection
public ActionResult Index()
{
//For first dropdown:
List<SelectListItem> optionList1 = new List<SelectListItem>();
optionList1.Add(new SelectListItem
{
Text = "Option 1",
Value = "Option 1"
});
optionList1.Add(new SelectListItem
{
Text = "Option 2",
Value = "Option 2"
});
optionList1.Add(new SelectListItem
{
Text = "Option 3",
Value = "Option 3"
});
//For second dropdown:
List<SelectListItem> optionList2 = new List<SelectListItem>();
optionList1.Add(new SelectListItem
{
Text = "Option 1",
Value = "Option 1"
});
optionList1.Add(new SelectListItem
{
Text = "Option 2",
Value = "Option 2"
});
optionList1.Add(new SelectListItem
{
Text = "Option 3",
Value = "Option 3"
});
List<SelectList> optionList3 = new List<SelectList>();
optionList1.Add(new SelectListItem
{
Text = "Option 4",
Value = "Option 4"
});
optionList1.Add(new SelectListItem
{
Text = "Option 5",
Value = "Option 5"
});
optionList1.Add(new SelectListItem
{
Text = "Option 6",
Value = "Option 6"
});
List<SelectListItem> listItems = new List<SelectListItem>();
listItems.Add(new SelectListItem
{
Text = "Exemplo1",
Value = "Exemplo1"
});
listItems.Add(new SelectListItem
{
Text = "Exemplo2",
Value = "Exemplo2",
Selected = true
});
listItems.Add(new SelectListItem
{
Text = "Exemplo3",
Value = "Exemplo3"
});
ViewBag.listItems = listItems;
ViewBag.optionList1 = optionList1;
ViewBag.optionList2 = optionList2;
ViewBag.optionList3 = optionList3;
return View();
}
}
}
每当我尝试在我的视图中调用ViewBag.listItems 时,例如:
@Html.DropDownList("name", ViewBag.listItems)
这将返回一个错误:
“HtmlHelper”没有名为“DropDownList”的适用方法,但似乎有一个使用该名称的扩展方法。扩展方法不能动态调度。考虑强制转换动态参数或调用扩展方法而不使用扩展方法语法。
我该如何解决这个问题?
编辑:
使用:@Html.DropDownList("name", (SelectList) ViewBag.listItems)
将导致:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:无法将 System.Collections.Generic.List 的类型转换为 System.Web.Mvc.SelectList
【问题讨论】:
-
您必须将其转换为 (SelectList)
-
@TetsuyaYamamoto 我要一个简单的例子,将列表从控制器传递到视图(不使用任何奇怪的查询、数据库或模型,这可能会吓到读者)。每当有类似问题的人可能正在寻找此问题时,标题就会更加清晰。也不一定与 MVC3 相关。
-
@Barrosy 你的问题和引用的问题本质上是一样的,因为两者都暗示你不应该直接在
DropDownList助手中使用ViewBag。相反,您需要转换为SelectList或IEnumerable<SelectListItem>类型。 -
@TetsuyaYamamoto 请参考我的编辑。
标签: c# html asp.net-mvc razor