Передача параметров между контроллером и JavaScript в приложении ASP.NET Core MVC? - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть приложение ASP.NET Core MVC с представлением, контроллером и небольшим файлом JavaScript.Функция 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>

enter image description here

Контроллер

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");
}

enter image description here

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);
            }  
        });
});

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

Попробуйте просто вернуться ниже

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 baselines ;

}

Ссылка на связанные вопросы:

https://stackoverflow.com/a/25714016/10201850 https://forums.asp.net/t/1382564.aspx?SelectListItem+losting+select+value+in+View+page

1 голос
/ 04 апреля 2019

4-й параметр предназначен для хранения выбранного значения, попробуйте:

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

Или просто так:

return new SelectList(baselines, "Value", "Text");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...