MVC Core DropDownList выбранное значение игнорируется - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь получить доступ к своей странице по адресу: https://localhost:44319/Analyze/Index/6

Проблема заключается в том, что мой раскрывающийся список всегда выбирает первый элемент в списке вместо того, который указан в ID.Проходя по отладчику, перед возвращением View () я вижу, что список SelectList был заполнен правильно.

AnalyzeController.cs

public IActionResult Index(int? Id)
{
    return Index(Id ?? getStatementEndingById(Id).StatementEndingId);
}

[HttpPost]
public IActionResult Index(int StatementEndingId)
{
    var statementEnding = getStatementEndingById(StatementEndingId);

    ViewBag.StatementEndingId = new SelectList(
                  _context.StatementEnding.OrderByDescending(s => s.StatementEndingId), 
                  "StatementEndingId", 
                  "Name", 
                  statementEnding);

    return View(getPayments(statementEnding));
}

private StatementEnding getStatementEndingById(int? statementEndingId)
{
    StatementEnding statementEnding;
    if (statementEndingId.HasValue)
    {
        statementEnding = _context.StatementEnding.FirstOrDefault(s => s.StatementEndingId == statementEndingId);
    }
    else
    {
        statementEnding = _context.StatementEnding.OrderByDescending(s => s.StatementEndingId).FirstOrDefault();
    }

    return statementEnding;
}

Настройка DropDownList в Razor

@Html.DropDownList("StatementEndingId", null, new { @class = "form-control mb-2 mr-sm-2" })

Я использую ядро ​​ASP.NET2.1.

Любые предложения приветствуются.Заранее спасибо.

1 Ответ

0 голосов
/ 06 декабря 2018

Сначала я бы порекомендовал создать типизированную модель, что-то вроде этого:

public class StatementViewModel
{
    public int StatementEndingId { get; set; }
    public List<SelectListItem> StatementEndings { get; set; }
}

Во-вторых, заполните модель всеми опадающими опциями (StatementEndings) и выбранной (StatementEndingId)

public IActionResult Index()
{
   var model = new StatementViewModel();
   model.StatementEndingId = getStatementEndingById(Id).StatementEndingId;
   model.StatementEndings = _context.StatementEnding.OrderByDescending(s => s.StatementEndingId).Select(p => new SelectListItem() { Text = p.Name, Value = p.StatementEndingId }).ToList();
   return View(model);
 }

И, наконец, в представлении

@model StatementViewModel
@Html.DropDownListFor(m => m.StatementEndingId, Model.StatementEndings, null, new { @class = "form-control mb-2 mr-sm-2" })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...