如何在MVC模型中创建静态下拉列表值

时间:2013-11-15 15:15:54

标签: asp.net-mvc model enums dropdownlistfor

如何为MVC模型中的枚举或列表中的Dropdownlist静态值(未从数据库中检索)准备模型,以便在项目中多次使用?如果你能发表一篇好文章,我将不胜感激?感谢。

2 个答案:

答案 0 :(得分:9)

与往常一样,您可以从视图模型开始:

public class MyViewModel
{
    public string SelectedValue { get; set; }
    public IEnumerable<SelectListItem> Values
    {
        get
        {
            return new[]
            {
                new SelectListItem { Value = "1", Text = "Item 1" },
                new SelectListItem { Value = "2", Text = "Item 2" },
                new SelectListItem { Value = "3", Text = "Item 3" },
            };
        }
    }
}

然后是控制器:

public ActionResult Index()
{
    var model = new MyViewModel();
    return View(model);
}

最后一个观点:

@model MyViewModel
@Html.DropDownListFor(x => x.SelectedValue, Model.Values)

对于枚举,您可以使用其中的一些帖子来说明自定义帮助程序。这是一篇博文,介绍了这样的帮助:http://blogs.msdn.com/b/stuartleeks/archive/2010/05/21/asp-net-mvc-creating-a-dropdownlist-helper-for-enums.aspx

答案 1 :(得分:0)

最后,我通过将参数描述为隐藏输入找到了解决方案。我不确定是否有更优雅的方法将参数从View传递给Controller。非常感谢你的好样品。我还将所有回复标记为有用。以下是我可能遇到类似问题的最终代码:


<强> ApplicantViewModel:

public class ApplicantViewModel
{
    public IEnumerable<Applicant> Applicants { get; set; }

    //Codes for Dropdownlist values
    public string SelectedValue { get; set; }
    public IEnumerable<SelectListItem> Values
    {
        get
        {
            return new[]
            {
                new SelectListItem { Value = "pdf", Text = "Pdf" },
                new SelectListItem { Value = "excel", Text = "Excel" },
                new SelectListItem { Value = "word", Text = "Word" }
            };
        }
    }
}


<强> ApplicantController:

public ViewResult Reporting()
{
    var model = new ApplicantViewModel(); 
    return View(model);
}

public ActionResult RenderReport(string SelectedValue, string name, string fileName, string dataSource, string table, string filter)
{
    //Codes for rendering report
    ...
}


Reporting.cshtml:

@model MyProject.Models.ApplicantViewModel

@using (Html.BeginForm("RenderReport", "Applicant", FormMethod.Post,
new { enctype = "multipart/form-data" }))
{ 
 <div>
    @Html.DropDownListFor(model => model.SelectedValue, Model.Values, "-- select an option --")

    <input type="hidden" name="name" value="Report1"/>
    <input type="hidden" name="fileName" value="image rapor"/>
    <input type="hidden" name="dataSource" value="ApplicantDataset"/>
    <input type="hidden" name="table" value="ApplicantsView"/>
    <input type="hidden" name="filter" value="David"/>

    <input type="submit" value="submit" />
 </div>  
}