MVC核心DropDownList选择的值被忽略

时间:2018-12-05 20:44:46

标签: asp.net-core asp.net-core-mvc

我正尝试通过以下网址访问我的页面: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中设置DropDownList

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

我正在使用ASP.NET Core 2.1。

任何建议都将不胜感激。预先感谢。

1 个答案:

答案 0 :(得分:2)

首先,我建议创建一个类型化的模型,就像这样:

import random
str_score = str(random.randint(3,18))

Ability_Score_Modifiers = {'1' : '-5', '2' : '-4', '3' : '-4', '4' : '-3', '5' : '-3', '6' : '-2', '7' : '-2', '8' : '-1', '9' : '-1', '10' : '0', '11' : '0', '12' : '+1', '13' : '+1', '14' : '+2', '15' : '+2', '16' : '+3', '17' : '+3', '18' : '+4', '19' : '+4', '20' : '+5', '21' : '+5', '22' : '+6', '23' : '+6', '24' : '+7', '25' : '+7', '26' : '+8', '27' : '+8', '28' : '+9', '29' : '+9', '30' : '+10'}
for key in Ability_Score_Modifiers:
        if key == str_score:
            print("True")
            print("Stat score of {} grants a modifier of {}".format(str_score, Ability_Score_Modifiers[str_score]))
True
Stat score of 3 grants a modifier of -4

第二次在模型中填充所有下拉选项(StatementEndings)和选定的一个选项(StatementEndingId)

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

最后,在视图中

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