C# 在MVC3中创建简单的下拉列表

C# 在MVC3中创建简单的下拉列表,c#,asp.net-mvc-3,razor,C#,Asp.net Mvc 3,Razor,我有一个文本框,用于输入职务角色的值。然而,这被限制为数据库端的特定数量的角色。因此,对我来说,使用只包含有效角色的dropdownlist更有意义。我正试图设置这个,但遇到了困难 我在视图中放置了以下代码: <p> @Html.LabelFor(m => m.Role) @Html.DropDownListFor(m=>m.Roles) @Html.ValidationMessageFor(m => m.Role) </p>

我有一个文本框,用于输入职务角色的值。然而,这被限制为数据库端的特定数量的角色。因此,对我来说,使用只包含有效角色的dropdownlist更有意义。我正试图设置这个,但遇到了困难

我在视图中放置了以下代码:

<p>
    @Html.LabelFor(m => m.Role)
    @Html.DropDownListFor(m=>m.Roles)
    @Html.ValidationMessageFor(m => m.Role)
</p>
在我的模型中:

public List<string> Roles
    {
        get
        {
            return new {"Author","Underwriter" };
        }
    }

但这不会编译。你知道我做错了什么吗?

为了创建一个下拉列表,你需要在视图模型上设置两个属性:一个标量属性,用于保存选定的值;另一个集合属性,用于包含要显示的可用项列表

因此,您总是从编写视图模型开始:

public class MyViewModel
{
    [Required]
    [DisplayName("Role")]
    public string SelectedRole { get; set; }

    public IEnumerable<SelectListItem> Roles 
    {
        get
        {
            return new[]
            {
                new SelectListItem { Value = "Author", Text = "Author" },
                new SelectListItem { Value = "Underwriter", Text = "Underwriter" }
            };
        }
    }
}
最后是一个对应的强类型视图:

@model MyViewModel
@using (Html.BeginForm())
{
    @Html.LabelFor(m => m.SelectedRole)
    @Html.DropDownListFor( m => m.SelectedRole, Model.Roles, "-- Role --")
    @Html.ValidationMessageFor(m => m.SelectedRole)

    <button type="submit">OK</button>
}

要创建下拉列表,视图模型上需要两个属性:一个是保存选定值的标量属性,另一个是包含要显示的可用项列表的集合属性

因此,您总是从编写视图模型开始:

public class MyViewModel
{
    [Required]
    [DisplayName("Role")]
    public string SelectedRole { get; set; }

    public IEnumerable<SelectListItem> Roles 
    {
        get
        {
            return new[]
            {
                new SelectListItem { Value = "Author", Text = "Author" },
                new SelectListItem { Value = "Underwriter", Text = "Underwriter" }
            };
        }
    }
}
最后是一个对应的强类型视图:

@model MyViewModel
@using (Html.BeginForm())
{
    @Html.LabelFor(m => m.SelectedRole)
    @Html.DropDownListFor( m => m.SelectedRole, Model.Roles, "-- Role --")
    @Html.ValidationMessageFor(m => m.SelectedRole)

    <button type="submit">OK</button>
}
将列表添加到creational语句中

public List<string> Roles
    {
        get
        {
            return new List<string> {"Author","Underwriter" };
        }
    }
将列表添加到creational语句中

public List<string> Roles
    {
        get
        {
            return new List<string> {"Author","Underwriter" };
        }
    }

我希望.Net框架能够通过调用IEnumerable result={myT,myT2}来创建IEnumerable;而不必编写IEnumerable result=new T[]{myT,myT2}。如果对象属于同一类型,则该类型甚至可以推断为var友好型;而不必编写IEnumerable result=new T[]{myT,myT2}。如果对象属于同一类型,则该类型甚至可以推断为var-friendly。