C# ASP.NET MVC通过ViewBag填充下拉列表
我是ASP.NETMVC技术的初学者。 在我的视图页面中,我有一个WebGrid,它绑定到从控制器传递的数据。我还想用数据库中的表列表填充一个下拉列表。我从助手方法检索表列表。我试图将列表发送到ViewBag,并希望填充下拉列表;但我无法得到它。仅出现一些语法错误或无法访问列表 我的控制器类:C# ASP.NET MVC通过ViewBag填充下拉列表,c#,asp.net-mvc,dropdown,populate,viewbag,C#,Asp.net Mvc,Dropdown,Populate,Viewbag,我是ASP.NETMVC技术的初学者。 在我的视图页面中,我有一个WebGrid,它绑定到从控制器传递的数据。我还想用数据库中的表列表填充一个下拉列表。我从助手方法检索表列表。我试图将列表发送到ViewBag,并希望填充下拉列表;但我无法得到它。仅出现一些语法错误或无法访问列表 我的控制器类: [Authorize] public ActionResult Index(int page = 1, string sort = "FirstName", string sort
[Authorize]
public ActionResult Index(int page = 1, string sort = "FirstName", string sortdir = "asc", string search = "")
{
int pageSize = 10;
int totalRecord = 0;
if (page < 1)
page = 1;
int skip = (page * pageSize) - pageSize;
var data = GetUsers(search, sort, sortdir, skip, pageSize, out totalRecord);
// Get Tables List
ViewBag.TableList = DataFiller.GetTableNames();
ViewBag.TotalRows = totalRecord;
return View(data);
}
我还创建了一个类tableinfo
,用于填充其中的数据并使用强类型对象。但是,由于找不到填充它的方法,所以使用了SelectListItem
。
由于它只包含表的列表,所以我不希望每次刷新页面时都填充它 您不能将包含
List
的ViewBag
动态对象直接用于DropDownList
HTML帮助程序,您需要将其转换为SelectList
:
@Html.DropDownList("tableName", (SelectList)ViewBag.TableList, "Select Table")
此外,DataFiller.GetTableNames()
方法调用应返回SelectList
实例:
class DataFiller
{
public SelectList GetTableNames()
{
// set select list items here
}
}
注意:我非常喜欢使用强类型视图模型,而不是使用ViewBag
或ViewData
将列表传递给HTML帮助程序,如下所示:
@Html.DropDownListFor(model => model.tableName, Model.TableList as SelectList, "Select Table")
public class MyUserCollection
{
public List<MyUser> Users { get; set; }
public SelectList TableList { get; set; }
public int TotalRows { get; set; }
public MyUserCollection(string search, string sort, string sortdir, int skip, int pageSize)
{
TableList = DataFiller.GetTableNames();
Users = GetUsers(search, sort, sortdir, skip, pageSize, out totalRecord);
}
}
相关问题:
如Tetsuya所述,您应该使用强类型视图模型 您可以这样构造模型:
@Html.DropDownListFor(model => model.tableName, Model.TableList as SelectList, "Select Table")
public class MyUserCollection
{
public List<MyUser> Users { get; set; }
public SelectList TableList { get; set; }
public int TotalRows { get; set; }
public MyUserCollection(string search, string sort, string sortdir, int skip, int pageSize)
{
TableList = DataFiller.GetTableNames();
Users = GetUsers(search, sort, sortdir, skip, pageSize, out totalRecord);
}
}
其他方面,您需要投射对象:
@Html.DropDownList("tableName", (SelectList)ViewBag.TableList, "Select Table")
请使用下面的代码,我希望这将有助于您的查询
ViewBag.TableList = DataFiller.GetTableNames();
@Html.DropDownList("ID", new SelectList(ViewBag.TableList, "ID", "Name"));
实际上,你也可以像下面这样做:
@Html.DropDownListFor(m => m.tableName, (IEnumerable<SelectListItem>)ViewBag.TableList ,"select table")
@Html.DropDownListFor(m=>m.tableName,(IEnumerable)ViewBag.TableList,“选择表格”)
谢谢。我有点困惑-你们都建议使用强类型视图模型而不是ViewBag。我的要求是只从数据库中获取表名列表。所以我通过一个静态类方法进行检索。使用模型方法,它不会在每次调用/刷新页面时检索表列表吗?如果是这样,那就没有必要了。所以我想到了这个选择。DataFilter返回列表GetTableNames()。我已经为表数据创建了一个类,但无法通过该类进行填充。在我的问题中增加了方法。谢谢你@Tetsuya。正如您所建议的,我选择了强类型视图模型方法。实际上,我只有@Html.DropDownListFor(model=>model.TableName,model.TableList,“selecttable”,新的{class=“formcontrol”})代码来绑定它。Model.TableList是SelectList的一部分,他们不需要也键入它。因为我想我对模型有点困惑,正如Alexander展示了模型的eg,我选择他的解决方案作为答案。谢谢。非常感谢,谢谢。我实现了您的解决方案,创建了一个单独的类来收集其中的所有数据,并将其用作模型。非常感谢。由于问题降级,我无法将您的解决方案设置为答案。谢谢。你的解决方案也有效;但是我选择了使用它作为一个强类型的视图模型。我想对于那些遇到类似问题的人来说,这可能是另一个选择。。很高兴你也解决了你的问题。=)谢谢您的回复。没问题@TruptiDalia
ViewBag.TableList = DataFiller.GetTableNames();
@Html.DropDownList("ID", new SelectList(ViewBag.TableList, "ID", "Name"));
@Html.DropDownListFor(m => m.tableName, (IEnumerable<SelectListItem>)ViewBag.TableList ,"select table")