Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC通过ViewBag填充下拉列表_C#_Asp.net Mvc_Dropdown_Populate_Viewbag - Fatal编程技术网

C# ASP.NET MVC通过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

我是ASP.NETMVC技术的初学者。 在我的视图页面中,我有一个WebGrid,它绑定到从控制器传递的数据。我还想用数据库中的表列表填充一个下拉列表。我从助手方法检索表列表。我试图将列表发送到ViewBag,并希望填充下拉列表;但我无法得到它。仅出现一些语法错误或无法访问列表

我的控制器类:

        [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")