如何解决ASP.NET Core MVC SelectList未设置selectedValue
在ASP.NET Core MVC中,我正在尝试为SelectList
设置预选值-我认为这是一个简单的任务,但它使我疯狂了!
我的控制器包含以下内容:
ViewData["Scores"] = GetScoresAsSelectList();
和
private SelectList GetScoresAsSelectList()
{
var scores =
Enumerable.Range(0,6)
.Select(score => new
{
Value = score.ToString(),Text = Helper.ConvertScoreToText(score) // gets some unique text back
})
.OrderBy(o => o.Value)
.ToList();
scores.Insert(0,new { Value = string.Empty,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>
输出(呈现的HTML)为:
<select class="form-control" id="1fce2ac1-e63c-4b85-b69a-14b7713eafaf" data-val="true" data-val-range="The field Field Score must be between 0 and 5." data-val-range-max="5" data-val-range-min="0" data-val-required="The Field Score field is required." name="FieldScore">
<option value="">Please select a value</option>
<option selected="selected" value="0">None (0)</option> <!-- WHY (OH WHY!?) IS THIS SELECTED? -->
<option value="1">1-Score (1)</option>
<option value="2">2-Score (2)</option>
<option value="3">3-Score (3)</option>
<option value="4">4-Score (4)</option>
<option value="5">5-Score (5)</option>
</select>
我尝试将scores.FirstOrDefault().Value
替换为""
。如果将Enumerable.Range(0,6)
替换为Enumerable.Range(1,6)
(将范围从1开始,而不是0),则会选择Please select a value
。
我不知道是什么问题,这让我发疯了! :)
非常感谢您的帮助
解决方法
谢谢@JohnathanBarclay带领我走了正确的路。
我将控制器更改为以下内容:
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之间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。