C# ASP.NET Core MVC SelectList未设置selectedValue
在ASP.NET Core MVC中,我试图为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
选择列表设置预先选择的值
——我认为这是一项简单的任务,但它让我发疯了
我的控制器包含以下内容:
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中传递,但模式已经在代码中建立:)。将
添加到视图中的
中,而不是将其添加到模型中,这是一个好主意。