【问题标题】:Populating a select dynamically using C sharp object使用 C 锐利对象动态填充选择
【发布时间】:2019-04-24 09:26:48
【问题描述】:

我有一个自定义对象列表(书籍),我希望根据在第一个下拉列表中选择的图块填充第二个选择框。我已经看到很多关于如何使用静态类型列表的答案,但不是来自 asp.net 对象的答案。

public class Book
{

    public string Title { get; set; }

    public List<string> Chapter { get; set; }

}

Model.books 是上述 Book 对象的列表。

在cshtml中:

<div class="form-group">
                        <label asp-for="Book.Title" class="control-label">Title</label>
                        <select id="title-select" asp-for="Book.Title" class="form-control">
                            @foreach (var item in Model.books)
                            {
                                <option value="@item">
                                    @Html.DisplayFor(modelItem => item.Title)
                                </option>
                            }
                        </select>
                    </div>

<div class="form-group">
                        <label asp-for="Book.Chapter" class="control-label">Chapter</label>
                        <select id="chapter-select" asp-for="Book.Chapter" class="form-control">
                            @foreach (var item in chapters?)
                            {
                                //Chapter select based on Title chosen above
                            }
                        </select>
                    </div>

JQuery:

    $('#title-select').on('change', function () {
        var value = this.value

//How to pass the book.chapter object into here to populate the dropdown list


    });

书籍或章节不多,因此可能值得通过所有书籍而不是使用 Ajax?我首先不确定如何将我的图书列表放到 JQuery 中(我不习惯网络开发)。

【问题讨论】:

    标签: c# jquery asp.net-core razor


    【解决方案1】:

    您可以将与章节关联的书名存储为章节下拉列表中选项元素的data-* 属性。

    @foreach (var book in Model.books)
        @foreach (var item in book.Chapter)
          {
             <option data-book-title="@book.Title">@item</option>
          }
    }
    

    然后使用 book 下拉列表中选择的 book 元素的值来过滤与 data 属性匹配的章节以启用它们:

    $('#title-select').on('change', function () {
      var bookValue = this.value;
      $('#chapter-select option').hide().filter(function(){
        return $(this).data('book-title') == bookValue;
      }).show();
    });
    

    【讨论】:

    • 谢谢 - 这让我开始了。我不得不将 .show() 添加到末尾而不是隐藏,以及将默认值更改为不隐藏的方法。
    • @Hawke:我的错。过滤列表应该是show。很高兴它有帮助:)
    猜你喜欢
    • 2020-08-18
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    相关资源
    最近更新 更多