【问题标题】:Fill in one EnumDropDownListFor based on the selection in another EnumDropDownListFor根据另一个 EnumDropDownListFor 中的选择填写一个 EnumDropDownListFor
【发布时间】:2020-08-14 09:01:21
【问题描述】:

我正在寻求您对 ASP.MVC 5 的帮助。

我有 3 个枚举:

    public enum Country
    {
        Canada = 1,
        USA = 2
    }

 public enum Provincies
    {
        Alberta,
        [Display(Name = "British Columbia")]
        BritishColumbia, 
        Manitoba,
        [Display(Name = "New Brunswick")]
        NewBrunswick,
        [Description("Newfoundlan And Labrador")]
        NewfoundlandAndLabrador,
        [Display(Name = "Nova Scotia")]
        NovaScotia, 
        Ontario,
        [Display(Name = "Prince Edward Island")]
        PrinceEdwardIsland, 
        Quebec,
        Saskatchewan
    }

public enum States
    {
        Alabama,
        Alaska,
        Arizona,
        Arkansas,
        California,
etc.
}

我正在使用 EnumDropDownListFor 在前端填充这些内容,唯一的问题是如何根据 Country 选择更改 Province EnumDropDownListFor ?我是否需要使用 ajax (我想是这样,但不确定如何使用来自另一个枚举的新值填充 EnumDropDownListFor),或者默认情况下是否有更优雅的方式来做到这一点?提前致谢!

【问题讨论】:

  • 我认为 Enum 不符合您的要求,因为一旦您通过 ajax 请求,您需要同时获取值和国家/地区名称。
  • 请尝试静态列表实现或键值对象。然后在此处发布您的初始代码。
  • @JerdineSabio 枚举已经是一个键值对象了,不是吗?
  • 嗯——枚举是一个值类型。它就像一个具有常量属性的静态类。您将无法过滤它,如果您通过 ajax 调用,您也将很难获得 display 属性。
  • 怎么样 - 为州和省创建 2 个枚举下拉列表,然后根据国家下拉列表的值隐藏和显示它们?

标签: ajax asp.net-mvc asp.net-mvc-5


【解决方案1】:

您可以做的最简单的事情是使用 Jquery 根据所选国家/地区枚举显示正确的下拉列表。这是一个示例,其中我将模型与您的枚举一起使用

public class Info
{
    public Enumeration.Country Countries { get; set; }
    public Enumeration.States States { get; set; }
    public Enumeration.Provincies Provincies { get; set; }
}

在你看来使用

@Html.DisplayNameFor(u => u.Countries)
@Html.EnumDropDownListFor(u => u.Countries, "Select Country", new { id = "CountriesDroDownLst" })
<hr />
<div class="provinciesContainer hidden">
    @Html.DisplayNameFor(u => u.Provincies)
    @Html.EnumDropDownListFor(u => u.Provincies)
    <hr />
</div>
<div class="statesContainer hidden">
    @Html.DisplayNameFor(u => u.States)
    @Html.EnumDropDownListFor(u => u.States)
    <hr />
</div>

最后是一个简单的 jquery 脚本,它将根据所选值隐藏或显示枚举下拉列表。 (加拿大:1,美国:2)

@section scripts{
    <script>
        $("#CountriesDroDownLst").change(function (e) {
            $(".statesContainer, .provinciesContainer").addClass("hidden");
            var container = ($(this).val() === "1") ? ".provinciesContainer" : ".statesContainer";
            $(container).toggleClass("hidden");
        });
    </script>
}

因此,每次用户选择美国时,加拿大下拉菜单都会被隐藏,反之亦然。如果您想在未选择任何内容的情况下隐藏两个下拉菜单,请像这样更改您的脚本

$("#CountriesDroDownLst").change(function (e) {
    var selectedValue = $(this).val();
    $(".statesContainer, .provinciesContainer").addClass("hidden");
    if (selectedValue === "0")
        return;
    $(".statesContainer, .provinciesContainer").addClass("hidden");
    var container = (selectedValue === "1") ? ".provinciesContainer" : ".statesContainer";
    $(container).toggleClass("hidden");
});

【讨论】:

  • 是的,我虽然是这样,但它是一种解决方法。我会接受这个答案,因为我没有其他选择,感谢您花时间写下代码!我很感激
  • 这是最简单的方法。您也可以通过使用 ajax 调用并动态填充单个下拉列表来执行此操作。如果你愿意,我也可以提供这种方式。
  • 非常感谢!我想我知道你会怎么做。只需创建一个属性类型为 Enum 的 VModel,并将根据用户国家/地区选择进行更改
猜你喜欢
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-03
相关资源
最近更新 更多