如何根据下拉列表中的选择来过滤页面上的数据

时间:2019-05-05 14:55:29

标签: jquery asp.net-core drop-down-menu

我有一个Dictionary对象,该对象具有业务类型ID和问题列表。我的业务类型有所下降。现在,当我从下拉列表中选择一种业务类型时,我需要刷新页面上显示的问题列表

html:

<script src="~/lib/jquery/dist/jquery.js"></script>
<div id="" class="">

    <div class="form-group">
        <label>Select a Business Type *</label>
        <select class="form-control" id="businessTypeSelectionModal">
            <option value="">--Select---</option>
            @foreach (var bt in Model.BusinessTypes)
            {
                <option value="@bt.Id">
                    @bt.Name
                </option>
            }
        </select>
    </div>

    <label>Questions *</label>

</div>

jQuery:

<script type="text/javascript">   
    var selectedBusinessTypeId;
    $(document).ready(function () {
        $("#businessTypeSelectionModal").change(function () {
            selectedBusinessTypeId = $("#businessTypeSelectionModal").val();
            LoadQuestions(selectedBusinessTypeId);
        });
    });
    function LoadQuestions(selectedBusinessTypeId)
    {
        html = '';
        alert('BT id:' + selectedBusinessTypeId);
     @foreach (var c in Model.Questions)
         {
             foreach (var q in c.Value)
             {
                 if (c.Key == selectedBusinessTypeId) {
                     html += '<label value="@c.Key" class="" />' + @q.Description;
html += '<input type="textbox" />';
                 }
             }
         }

     } 
</script>

在下拉列表的选择更改上,我试图获取ID,将其传递给LoadQuestions()函数,在该函数中,我需要检查ID是否等于问题字典中的ID。如果是的话,我需要将问题显示为标签,并在每个问题旁边显示一个文本框。截至目前,我收到以下错误:

LoadQuestions()函数中的

'selectedBusinessTypeId'和'html'变量->在当前上下文中不存在

任何帮助将不胜感激。有更好的方法吗?

3 个答案:

答案 0 :(得分:0)

$("#businessTypeSelectionModal").val()是否包含id或业务类型的值?
您可以通过此获取ID
selectedBusinessTypeId = $(“#businessTypeSelectionModal”)。find('option:selected')。attr('id');

答案 1 :(得分:0)

您将使用JSON将模型序列化为javascript变量,然后使用此javascript变量编写javascript代码:

function LoadQuestions(selectedBusinessTypeId)  
{
    html = '';

    var questions = @Html.Raw(Json.Serialize(Model.Questions));
    for (var type in questions) {
        if (type == selectedBusinessTypeId) {

            for (var i = 0; i < questions[type].length; i++) {
                alert( questions[type][i].description)
                //html += "<label value='" + questions[type][i].id + "' class='' />" + questions[type][i].description;
              // html += "<input type='textbox' />";
            }

        }
    }

}

假设Model.Questions的类型是:

 public Dictionary<int, List<Question>> Questions { get; set; }

答案 2 :(得分:0)

正如Nan Yu所说,使用Json.Serialize解决了这个问题