在下拉列表MVC3中绑定值列表的最佳方法

时间:2014-05-10 14:09:56

标签: c# asp.net-mvc asp.net-mvc-3 razor html.dropdownlistfor

我有两种方法可以将我的值列表绑定到MVC3的下拉列表中。但不确定哪种差异和最好/更简单的绑定方式。

//代码

public List<SelectListItem> CountryList
        {
            get
            {
                return new List<SelectListItem>
            {
                new SelectListItem { Value = "1", Text = "Bangladesh" },
                new SelectListItem { Value = "2", Text = "India" },
                new SelectListItem { Value = "3", Text = "Nepal" },
                new SelectListItem { Value = "4", Text = "SriLanka" },
            };
            }
        }

(OR)

public SelectList StatusList()
        {

            List<SelectListItem> lstStatus = new List<SelectListItem>
                {
                    new SelectListItem { Value = "1", Text = "Yes" },
                    new SelectListItem { Value = "2", Text = "No" },
                };

            return new SelectList(lstStatus, "Value", "Text", Status);


        }

我是否有任何优点/缺点。我必须绑定这些值并获取/设置选定的值。哪种方法最适合?

请建议。

1 个答案:

答案 0 :(得分:1)

我倾向于在MVC应用程序中使用 SelectListItem 的通用枚举。主要原因是当您将ViewModels与视图一起使用时更有意义。

假设我将电影存储在数据库中。我代表一部带有POCO课程的电影。

public class Movie
{
    public string Genre { get; set; }
}

编辑影片的页面会收到ViewModel。

public class MovieViewModel
{
    public string Genre { get; set; }

    public IEnumerable<SelectListItem> GenreList
    {
        get
        {
            yield return new SelectListItem { Text = "Comedy", Value = "1" };
            yield return new SelectListItem { Text = "Drama", Value = "2" };
            yield return new SelectListItem { Text = "Documentary", Value = "3" };
        }
    }
}

ViewModel是我的模型,但具有个性化我的视图的其他属性,例如可用类型的列表。

最后在我看来,我使用ASP.NET包装器Html.DropDownListFor()填充我的下拉列表。

@model MvcApplication1.Models.MovieViewModel

<!DOCTYPE html>

<html>
<head>
    <title>Index</title>
</head>
<body>
    <div>
        @Html.DropDownListFor(m => m.Genre, Model.GenreList)
    </div>
</body>
</html>

然后使用ViewModel自动选择所选值。