1

我有一个用于输入工作角色值的文本框。但是,这仅限于数据库方面的某些角色。因此,使用仅包含有效角色的下拉列表对我来说更有意义。我正在尝试设置它,但遇到了困难。

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

<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" };
        }
    }

虽然这不会编译。任何想法我做错了什么?

4

2 回答 2

6

为了创建下拉列表,您需要在视图模型上使用 2 个属性:一个标量属性,它将保存选定的值,一个集合属性,其中包含您想要显示的可用项目的列表。

因此,与往常一样,您从编写视图模型开始:

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" }
            };
        }
    }
}

然后是一个控制器动作,将这个模型传递给视图:

public class HomeController: Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel();
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }
        return Content("Thanks for selecting role: " + model.SelectedRole);
    }
}

最后是相应的强类型视图:

@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>
}
于 2012-07-06T11:34:01.293 回答
0

添加List<string>到创建语句

public List<string> Roles
    {
        get
        {
            return new List<string> {"Author","Underwriter" };
        }
    }
于 2012-07-06T11:34:09.133 回答