MVC Core DropDownList选择的值被忽略



我正在尝试访问我的页面: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;
}

在Razor中设置下拉列表

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

我使用的是ASP.NET Core 2.1。

任何建议都将不胜感激。提前谢谢。

首先,我会建议创建一个类型化模型,类似于以下模型:

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

第二步,用所有下拉选项(StatementEndings(和所选选项(Statement EndingId(填充模型

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

最新更新