C# 将dropdownlist绑定到mvc视图

C# 将dropdownlist绑定到mvc视图,c#,asp.net-mvc,razor,html.dropdownlistfor,C#,Asp.net Mvc,Razor,Html.dropdownlistfor,我试图将下拉列表绑定到来自MVC6中数据上下文类的数据集。我编写了一个函数来获取填充的列表,但无法使用razor复制相同的列表。这是我到目前为止所拥有的。请注意,我还没有创建模型。试图利用从数据库脚手架生成的POCO类 Layout.cshtml上的函数 @functions{ public List<HSIP.Entities.StateDetails> function1() { // protected readonly HSIP.Entit

我试图将下拉列表绑定到来自MVC6中数据上下文类的数据集。我编写了一个函数来获取填充的列表,但无法使用razor复制相同的列表。这是我到目前为止所拥有的。请注意,我还没有创建模型。试图利用从数据库脚手架生成的POCO类

Layout.cshtml上的函数

@functions{

    public List<HSIP.Entities.StateDetails> function1()
    {
        //  protected readonly HSIP.Entities.HSIPContext context;

        HSIP.Entities.HSIPContext hsipcontext = new HSIP.Entities.HSIPContext();
        List<HSIP.Entities.StateDetails> getstatelist = (from s in hsipcontext.StateDetails
                                                   select new HSIP.Entities.StateDetails
                                                   {
                                                       StateDesc = s.StateDesc,
                                                       StateCode = s.StateCode,
                                                       StateAbbr = s.StateAbbr
                                                   }).ToList();
        //SelectList list = new SelectList(getstatelist, "Region", "StateCode", "StateAbbr", "StateDesc");
        return getstatelist;
    }
}
@函数{
公共列表功能1()
{
//受保护的只读HSIP.Entities.HSIPContext上下文;
HSIP.Entities.HSIPContext HSIPContext=新的HSIP.Entities.HSIPContext();
List getstatelist=(来自hsipcontext.StateDetails中的s
选择new HSIP.Entities.StateDetails
{
StateDesc=s.StateDesc,
StateCode=s.StateCode,
StateAbbr=s.StateAbbr
}).ToList();
//SelectList=新的SelectList(getstatelist,“Region”,“StateCode”,“StateAbr”,“StateDesc”);
返回getstatelist;
}
}
Razor语法:

@DropDownList(“StateDesc”,@function1(),“请选择状态名称”)

Razor语法引发错误:没有给定与IHTMLHelper.Dropdownlist(string、IEnumerable、string、object)所需的形式参数“htmlattributes”对应的参数

谁能给我指一下正确的方向吗

谢谢,
Hari

首先在控制器中使用SelectListItem并将其传递给视图。然后使用Razor语法填充下拉列表

 List<SelectListItem> stateList = (from s in hsipcontext.StateDetails
                                               select new HSIP.Entities.StateDetails
                                               {
                                                   StateDesc = s.StateDesc,
                                                   StateCode = s.StateCode,
                                                   StateAbbr = s.StateAbbr
                                               }).ToList();

首先在控制器中使用SelectListItem并将其传递给视图,然后使用Razor语法填充下拉列表

 List<SelectListItem> stateList = (from s in hsipcontext.StateDetails
                                               select new HSIP.Entities.StateDetails
                                               {
                                                   StateDesc = s.StateDesc,
                                                   StateCode = s.StateCode,
                                                   StateAbbr = s.StateAbbr
                                               }).ToList();
我宁愿这样做:

在控制器/模型中:

        using System.Web.Mvc;
        public List<SelectListItem> DropdownListFilter()
        {
            var listitem = new List<SelectListItem>();
            listitem.Add(new SelectListItem { Text = "Dropdown1", Value = "0", Selected = true });
            listitem.Add(new SelectListItem { Text = "Dropdown2", Value = "1", Selected = false });
            listitem.Add(new SelectListItem { Text = "Dropdown3", Value = "2", Selected = false });
            return listitem;
        }
在视图中,您必须按如下方式调用过滤器下拉列表:

@Html.DropDownList("FilterDropdown")
希望能有所帮助。

我更愿意这样做:

在控制器/模型中:

        using System.Web.Mvc;
        public List<SelectListItem> DropdownListFilter()
        {
            var listitem = new List<SelectListItem>();
            listitem.Add(new SelectListItem { Text = "Dropdown1", Value = "0", Selected = true });
            listitem.Add(new SelectListItem { Text = "Dropdown2", Value = "1", Selected = false });
            listitem.Add(new SelectListItem { Text = "Dropdown3", Value = "2", Selected = false });
            return listitem;
        }
在视图中,您必须按如下方式调用过滤器下拉列表:

@Html.DropDownList("FilterDropdown")

希望能有所帮助。

你究竟为什么要在视图中使用
@函数来执行此操作?控制器负责获取数据并将其传递给视图。您不应该知道任何有关数据库上下文和使代码无法进行单元测试的信息。(而且
DropDownList()
的第二个参数是
IEnumerable
)我认为这个链接可以更好地解决您的问题。您究竟为什么要在视图中使用
@函数来做这件事?控制器负责获取数据并将其传递给视图。您不应该知道任何有关数据库上下文和使代码无法进行单元测试的信息。(并且
DropDownList()
的第二个参数是
IEnumerable
)认为此链接为您的问题提供了更好的解决方案。感谢您尝试并告诉您我尝试了您的方法,但在我看来,我得到了错误:名称状态列表在当前上下文中不存在。我必须在布局视图中实现这个下拉列表绑定,因为它应该显示在所有页面上。我遗漏了什么吗?银行会尝试让你知道我尝试了你的方法,但在我看来,我得到了一个错误:名称状态列表在当前上下文中不存在。我必须在布局视图中实现这个下拉列表绑定,因为它应该显示在所有页面上。我遗漏了什么吗