首页 > 解决方案 > onchange htmlattribute 不会将模型属性传递给 js 函数

问题描述

我想从局部视图的下拉列表中获取用户输入,并将其传递给索引页面中的 js 函数,以根据 QuestionType 属性的值过滤掉结果。因此,视图模型如下所示:

public class TestQuestionModel
    {
        public Guid TestId { get; set; }

        public Guid QuestionId { get; set; }

        public string Id { get; set; }

        public string QuestionType { get; set; }
    }

Razor 页面中的下拉列表如下所示:

@model ICollection<Lab.Quiz.BL.Services.TestCardService.Models.TestQuestionModel>
...    
@Html.DropDownList("QuestionType", new SelectListItem[]
                {
                    new SelectListItem() {Text = "Single Selection Question", Value = "SingleSelectionQuestion", Selected = true},
                    new SelectListItem() {Text = "Multiple Answers Question", Value = "MultipleAnswerQuestion"},
                    new SelectListItem() {Text = "Open Answer Question", Value = "OpenAnswerQuestion"},
                    new SelectListItem() {Text = "Program Code Question", Value = "ProgramCodeQuestion"}
                },
                    new
                    {
                        onchange = "filterQuestions('{@Model.FirstOrDefault()?.TestId.ToString()}', this.value)"
                    })

索引页面上的功能如下所示:

function filterQuestions(testId, questionType) {
        alert("called");
        $.ajax({
            url: "Home/Filter",
            data: { testId: testId, questionType: questionType },
            type: 'GET',
            dataType: 'html',
            success: function (result) {
                $("#questionsDiv").html(result);
            }
        });

不幸的是,该函数不会被调用。但是,如果我将函数更改为仅接受一个属性,并相应地将函数调用更改为仅包含一个属性 ( this.value ),它会按预期工作。关于如何从 @Html.DropdownList 传递的任何建议不仅是它的值,还有模型的属性?

标签: javascriptasp.netfunctionasp.net-corehtml.dropdownlistfor

解决方案


你可以试试这个,使用+...+来分割数据:

onchange = "filterQuestions("+@Model.FirstOrDefault().TestId.ToString()+", this.value)"

结果:

在此处输入图像描述


推荐阅读