【问题标题】:ASP.NET MVC DropDown Editor TemplateASP.NET MVC 下拉编辑器模板
【发布时间】:2012-01-16 23:34:22
【问题描述】:

我正在寻找使用 MVC 创建下拉列表编辑器模板的最佳方法。似乎有各种方法,但我找不到最好的方法,每个人的做法似乎都不一样。我也将 MVC3 与 Razor 一起使用,因此首选适用于此的方法。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 razor


    【解决方案1】:

    有很多方法,说哪个是最好的将是主观的,并且可能不适用于您忘记在问题中描述的情况。这是我的做法:

    型号:

    public class MyViewModel
    {
        public string SelectedItem { get; set; }
        public IEnumerable<Item> Items { get; set; }
    }
    
    public class Item
    {
        public string Value { get; set; }
        public string Text { get; set; }
    }
    

    控制器:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            var model = new MyViewModel
            {
                // TODO: Fetch this from a repository
                Items = new[] 
                {
                    new Item { Value = "1", Text = "item 1" },
                    new Item { Value = "2", Text = "item 2" },
                    new Item { Value = "3", Text = "item 3" },
                }
            };
            return View(model);
        }
    
        [HttpPost]
        public ActionResult Index(MyViewModel model)
        {
            if (!ModelState.IsValid)
            {
                // redisplay the view to fix validation errors
                return View(model);
            }
    
            // TODO: The model is valid here => 
            // perform some action using the model.SelectedItem 
            // and redirect to a success page informing the user
            // that everything went fine
            return RedirectToAction("Success");
        }
    }
    

    查看(~/Views/Home/Index.cshtml):

    @model MyApp.Models.MyViewModel
    
    @{ Html.BeginForm(); }
        @Html.EditorForModel()
        <input type="submit" value="OK" />
    @{ Html.EndForm(); }
    

    编辑器模板(~/Views/Home/EditorTemplates/MyViewModel.cshtml):

    @model MyApp.Models.MyViewModel
    
    @Html.DropDownListFor(x => x.SelectedItem, 
        new SelectList(Model.Items, "Value", "Text"))
    

    【讨论】:

    • 谢谢你,这似乎正是我想要的。
    • 谢谢达林。但是编辑器模板只有一个任务(显示下拉菜单)。你怎么能简单地调用 EditotFormModel() ?如果我需要两个编辑器模板怎么办?一个用于下拉列表,一个用于复选框列表?我都想使用相同的视图?
    【解决方案2】:

    这是我在这篇文章中的做法:

    One EditorTemplate for all DropDownLists in ASP.Net MVC

    【讨论】:

    • 我喜欢这个解决方案,但它可能需要更多的 DI,比如使用 DependencyResolver 而不是 Activator 来实例化
    • 其实我对它做了很多改进,但是我懒得更新文章了:) 也许我会做一个新的然后我告诉你:)
    【解决方案3】:

    我个人认为列表项应该放置在视图数据而不是视图模型中,但这实际上取决于您是显示一个永不更改的下拉列表(使用视图数据)还是您必须动态修改它(使用视图模型)。

    在示例中,您将相同的视图模型发布到索引操作。索引操作只对所选项目感兴趣,因此只需将索引发布操作的参数更改为字符串 selectedItem。这样模型绑定器将查看表单参数并为您填充索引参数。

    另外,我认为最好将 SelectedListItems 列表传递给视图,这样您就不需要任何转换,也不需要 Item 类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2012-01-06
      相关资源
      最近更新 更多