【问题标题】:How to create Static Dropdownlist values in MVC Model如何在 MVC 模型中创建静态下拉列表值
【发布时间】:2013-11-15 15:15:53
【问题描述】:

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

【问题讨论】:

    标签: asp.net-mvc model enums dropdownlistfor


    【解决方案1】:

    一如既往,您可以从视图模型开始:

    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)如果我将这些值与 Student 实体一起使用,我也会将此实体添加到同一个 ViewModel。真的吗? 2)如果我在同一个剃须刀上使用两个具有相同值的下拉列表(例如是/否值),在这种情况下我需要创建另一个 SelectListItem 吗?或者它也可以用于同一 Razor 页面上的不同 Dropdownlist 吗? ——
    • 我测试了这个好方法。但问题是:我不能将 SelectedValue 传递给控制器​​。我怎样才能用这种方法做到这一点?
    • 您的 HttpPost 控制器操作可以将视图模型作为参数,然后您将自动在 SelectedValue 属性中获取所选值。
    • 感谢您的回复。我也是这么想的,昨天试了一下。但是,尽管我可以正确传递 viewModel,但“Values”中的值除外(ViewModel 中的 Applicants 实体和 SelectedValue)。我知道这很奇怪,但我不确定错误可能在哪里。任何的想法?在此先感谢...
    • 导入:使用 System.Web.Mvc;
    【解决方案2】:

    最后我通过将参数描述为隐藏输入找到了解决方案。我不确定是否有更优雅的方法可以将参数从 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" }
                };
            }
        }
    }
    


    申请人控制器:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多