gpt4 book ai didi

asp.net-mvc - 将 HTML.EditorFor 转换为下拉列表 (html.dropdownfor?)

转载 作者:行者123 更新时间:2023-12-03 15:18:33 24 4
gpt4 key购买 nike

目前我在这样的默认“创建” View 页面中使用 Html.EditorFor 控件。

 <%: Html.EditorFor(model => model.IsActive) %> 

我想将其转换为带有值的下拉列表,并且仍然绑定(bind)到 View 中的模型。我的问题是两方面的。
  • 如果下拉菜单中只需要 2/3 的值。有没有一种快速的方法来显式填充 2 或 3 个值?
  • 如果列表很大并且需要来自 sql 查询,该怎么做?

  • 在此先感谢您的帮助。

    最佳答案

    为了生成下拉列表,您需要 View 模型上的 2 个属性:一个标量属性,用于将所选值绑定(bind)到一个集合属性,该属性将包含要在下拉列表中显示的项目。

    所以你可以定义一个 View 模型:

    public class DropDownListViewModel
    {
    public string SelectedValue { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
    }

    然后在您的主视图模型上具有这种类型的属性:
    public DropDownListViewModel Foo { get; set; }

    现在您可以为这种类型( ~/Views/Shared/EditorTemplates/DropDownListViewModel.ascx)创建一个自定义编辑器模板:
    <%@ Control 
    Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DropDownListViewModel>"
    %>
    <%= Html.DropDownListFor(x => x.SelectedValue, Model.Items) %>

    然后在您的主视图中:
    <%= Html.EditorFor(x => x.Foo) %> 

    现在剩下的就是让你的 Controller Action 渲染主视图来填充 Foo。具有相应值的属性。可以是硬编码的,来自存储库或其他任何东西。这并不重要。

    另一方面,如果您事先知道这些值,您可以在编辑器模板 ( ~/Views/Shared/EditorTemplates/YesNoDropDown.ascx) 中对它们进行硬编码:
    <%= Html.DropDownList(
    "",
    new SelectList(
    new[]
    {
    new { Value = "true", Text = "Yes" },
    new { Value = "false", Text = "No" },
    },
    "Value",
    "Text",
    Model
    )
    ) %>

    进而:
    <%= Html.EditorFor(x => x.IsActive, "YesNoDropDown") %> 

    或者通过装饰 View 模型上的 IsActive 属性:
    [UIHint("YesNoDropDown")]
    public bool IsActive { get; set; }

    进而:
    <%= Html.EditorFor(x => x.IsActive) %> 

    关于asp.net-mvc - 将 HTML.EditorFor 转换为下拉列表 (html.dropdownfor?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9517627/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com