根据另一个 EnumDropDownListFor 中的选择填充一个 EnumDropDownListFor

Fill in one EnumDropDownListFor based on the selection in another EnumDropDownListFor

我正在寻求你的帮助 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 来填充前端的那些,唯一的问题是如何根据国家/地区选择来更改省份 EnumDropDownListFor?我是否需要使用 ajax(我认为是,但不确定如何使用另一个枚举的新值填充 EnumDropDownListFor),或者默认情况下是否有更优雅的方式来做到这一点?提前致谢!

您可以做的最简单的事情是使用 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,USA: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");
});