首页 > 解决方案 > 在 ASP.NET Core MVC 应用程序中的控制器和 JavaScript 之间传递参数?

问题描述

我有一个带有视图、控制器和一个小的 JavaScript 文件的 ASP.NET Core MVC 应用程序。当用户单击列表框中的项目时,将调用 JavaScript 函数。JavaScript 调用控制器上的函数,控制器创建 SelectedListItem 列表并设置“Selected”、“Value”和“Text”的值。'选定' 设置为true

我注意到的是,当 JavaScript 函数接收到数据时,一切都是正确的,但“已选择”字段设置为false '我不确定这是怎么回事。感谢您的帮助!

看法

        <div class="form-group">
          @Html.LabelFor(x => Model.SelectedBaselines, htmlAttributes: new { @class = "col-form-label" })
          @Html.ListBoxFor(x => Model.SelectedBaselines, new SelectList(Model.BaselinesList, "Value", "Text"), htmlAttributes: new { @class = "form-control", id = "baselines", @multiple = true, size = "10", style = "width:200px;" })
          @Html.ValidationMessageFor(x => Model.SelectedBaselines, "", new { @class = "text-danger" })
        </div>

在此处输入图像描述

控制器

public IEnumerable<SelectListItem> GetSelectedBaselines(string meterId)
{
  IQueryable<SelectListItem> baselines =
    from mlookup in _dbContext.MeterBaselineLookup.AsNoTracking()
    join baseline in _dbContext.MeterBaseline on mlookup.MeterBaselineId equals baseline.Id
    where mlookup.MeterId == Convert.ToInt32(meterId)
    orderby baseline.Id
    select new SelectListItem
    {
      Selected = true,
      Value = baseline.Id.ToString(),
      Text = baseline.Name
    };

  return new SelectList(baselines, "Value", "Text");
}

在此处输入图像描述

JavaScript

$('#meters').change(function() {
    var url = "/Meters/GetSelectedBaselines";

    $.getJSON(url,
        { meterId: $("#meters option:selected").val() },
        function(data) {

            $('#baselines option').prop('selected', false); // Clear selected baselines

            var len = $('#baselines option').length;

            for (var i = 1; i <= len; i++) {  
                $("#baselines option[value=" + i + "]").attr("selected", true);
            }  
        });
});

标签: javascriptc#jqueryasp.net-coreasp.net-core-mvc

解决方案


第 4 个参数用于存储选择的值,请尝试:

return new SelectList(baselines, "Value", "Text",baselines[0].baseline.Id);

或者只是这样:

return new SelectList(baselines, "Value", "Text");

推荐阅读