我有这样的观点:
@{
var jobTitles = new List<string>
{
"Title1",
"Title2",
"Title3",
};
var titlesList = new SelectList(jobTitles, Model.Title);
}
现在titlesList是一个SelectList,它包含Model中的选定值。我调试了这个并确保它是正确的。
然后在同一视图中,我有以下剃刀:
@Html.DropDownListFor(model => model.Title, titlesList, "Select an option", new { @class = "form-control", @required = "required" })
当我的视图在这种情况下呈现时,下拉列表中的选定选项是“选择一个选项”。我调试了列表,所选的值确实是内存中正确的值,但是DropDownListFor没有显示它。
编辑:
我在另一个EditorTemplate上使用同样的原理(如果它有效):
var types = new List<string>
{
"Set Up",
"Show Start",
"Break Down"
};
@Html.DropDownListFor(model => model.TimeSlotTask, new SelectList(types), "Select an option", new { @class = "form-control", @required = "required" })
我意识到在这两个示例中,SelectList的初始化方式不同,但我在每个示例中都尝试了两种方式,并且它在第一个示例中不起作用。
就像我说的那样,我已经调试了Controller和Razor,我正在寻找的Model上的属性值被正确设置,并且与SelectList绑定的列表中的值相同。
编辑#2(模板)
我的主视图包含以下代码段:
<span id="addAttendeeButton" class="btn btn-success btn-sm"><i class="fa fa-plus"></i></span><span id="removeAttendeeButton" class="btn btn-danger btn-sm"><i class="fa fa-minus"></i></span>
<ul id="attendees" style="list-style-type: none; margin: 0; padding: 0;">
@Html.EditorFor(model => model.Attendees)
</ul>
使用一些jQuery来处理向#attendees
添加新项目 $("#addAttendeeButton").click(function() {
var id = $('#attendees > li').length;
$.get('@Url.Action("CreateAttendee")/' + id, function(data) {
$('#attendees').append(data);
});
});
$("#removeAttendeeButton").click(function() {
$('#attendees li:last').remove();
});
然后参加者的EditorTemplate是:
@{
var jobTitles = new List<string>
{
"Account Manager",
"Application Engineer",
"Customer Care",
"Sales Engineer",
"Marketing Manager",
"Product Manager",
"Trade Show Coordinator",
};
var titlesList = new SelectList(jobTitles);
}
<li>
@Html.HiddenFor(model => model.Id)
<div class="form-group">
<div class="col-md-4">
<div class="input-group-lg">
<label>Name</label>
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
</div>
</div>
<div class="col-md-4">
<div class="input-group-lg">
<label>Job Titless</label>
@Html.DropDownListFor(model => model.Title, titlesList, "Select an option", new { @class = "form-control", @required = "required" })
@Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })
</div>
</div>
<div class="col-md-4">
<div class="input-group-lg">
<label>Show Lead</label>
@Html.CheckBoxFor(m => m.Lead, new { @class = "form-control" })
</div>
</div>
</div>
</li>
问题是EditorTemplate中的DropDownListFor。当我加载现有实体时,它不会从模型中选择值。但是,当我简单地在Razor中使用foreach循环迭代“Attendees”集合时,Title属性被正确设置并正确显示(只需使用a来显示它)。
所以我知道它正在从下拉列表中正确设置并保存到模型中,但是当重新渲染编辑视图时,如果存在下拉列表,则在指向模型的下拉列表中未选择该值。 / p>