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