C# ASP.NET Core MVC SelectList未设置selectedValue

C# ASP.NET Core MVC SelectList未设置selectedValue,c#,asp.net-core-mvc,C#,Asp.net Core Mvc,在ASP.NET Core MVC中,我试图为选择列表设置预先选择的值——我认为这是一项简单的任务,但它让我发疯了 我的控制器包含以下内容: ViewData["Scores"] = GetScoresAsSelectList(); private SelectList GetScoresAsSelectList() { var scores = Enumerable.Range(0, 6) .Select(score => n

在ASP.NET Core MVC中,我试图为
选择列表设置预先选择的值
——我认为这是一项简单的任务,但它让我发疯了

我的控制器包含以下内容:

ViewData["Scores"] = GetScoresAsSelectList();
private SelectList GetScoresAsSelectList()
{
    var scores =
        Enumerable.Range(0, 6)
        .Select(score => new
        {
            Value = score,  //changed from string to int
            Text = Helper.ConvertScoreToText(score) // gets some unique text back
        })
       .OrderBy(o => o.Value)
       .ToList();
    scores.Insert(0, new { Value = -1/* changed from "" to -1 */, Text = "Please select a value" });
    return new SelectList(scores, "Value", "Text", scores.FirstOrDefault().Value);
}

我的观点包括:

@{ var FieldScoreId = Guid.NewGuid(); }
<div class="form-group col-md-3">
    <label asp-for="FieldScore" class="control-label"></label>
    <select asp-for="FieldScore" class="form-control" asp-items="ViewBag.Scores" id="@FieldScoreId"></select>
    <span asp-validation-for="FieldScore" class="text-danger"></span>
</div>
@{var FieldScoreId=Guid.NewGuid();}
输出(呈现的HTML)为:


请选择一个值
无(0)
1分(1)
2分(2)
3分(3)
4分(4)
5分(5)
我尝试用
替换
分数.FirstOrDefault().Value
。如果将
可枚举范围(0,6)
替换为
可枚举范围(1,6)
(范围从1开始,而不是0),
请选择一个值将被选中

我不知道问题出在哪里,这让我发疯了!:)


非常感谢您的帮助

感谢@JohnathanBarclay带领我走上正确的道路

我将控制器更改为以下内容:

ViewData["Scores"] = GetScoresAsSelectList();
private SelectList GetScoresAsSelectList()
{
    var scores =
        Enumerable.Range(0, 6)
        .Select(score => new
        {
            Value = score,  //changed from string to int
            Text = Helper.ConvertScoreToText(score) // gets some unique text back
        })
       .OrderBy(o => o.Value)
       .ToList();
    scores.Insert(0, new { Value = -1/* changed from "" to -1 */, Text = "Please select a value" });
    return new SelectList(scores, "Value", "Text", scores.FirstOrDefault().Value);
}

同样在控制器中,在Add-GET方法中,我将
FieldScore
设置为
-1
。工作正常:下拉列表默认为“请选择”,并且必须将下拉列表从“请选择”更改为“请选择”,因为模型需要介于0和5之间的范围。

在绑定到模型属性的选择上使用时,所选项的值将与该属性的值相等。
SelectList
上设置的所选值将被忽略。谢谢@JohnathanBarclay-你说的有道理:)@danwag:Johnathan说的是正确的。我想补充一点:由于您已经将视图模型传递给视图,您可以在那里定义一个列表来包含所有可能的选项,而不是使用ViewBag。不过,您不应该在选项列表中添加“请选择一个值”。相反,您可以在视图中定义该选项:
-select-
谢谢@DavidLiang。通常,我会在视图模型中传递选择列表,而不是在ViewBag中传递,但模式已经在代码中建立:)。将
添加到视图中的
中,而不是将其添加到模型中,这是一个好主意。