我已搜索但未成功获取下拉列表中选择的默认值。
以下属性不在我的MVC项目中,它位于我的Core中。因此,我不想引用System.Web.Mvc而是使用Dictionary。
[Display(Name = "Time Zone")]
public int TimeZone { get; set; }
public Dictionary<string, string> TimeZoneOptions
{
get
{
Dictionary<string, string> d = new Dictionary<string, string>();
d.Add("(GMT -10:00) Hawaii", "-10");
d.Add("(GMT -9:00) Alaska", "-9");
d.Add("(GMT -8:00) Pacific Time", "-8");
d.Add("(GMT -7:00) Mountain Time", "-7");
d.Add("(GMT -6:00) Central Time", "-6");
d.Add("(GMT -5:00) Eastern Time", "-5");
d.Add("Unknown", "0");
return d;
}
}
我在MVC项目中创建了一个CreateViewModel,这样我就可以将上面的Dictionary转换为具有预选默认值的SelectList。
public class CreateViewModel
{
public SelectList GetUserTimeZoneList(string selectedValue)
{
return new SelectList(new BankUser().TimeZoneOptions, "Value", "Key", selectedValue);
}
}
我的观点(请注意“-7”作为传递的默认值)
<div class="form-group">
@Html.LabelFor(model => model.TimeZone, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.TimeZone, new CreateViewModel().GetUserTimeZoneList("-7"), new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.TimeZone)
</div>
</div>
结果
<select class="form-control" data-val="true" data-val-number="The field Time Zone must be a number." data-val-required="The Time Zone field is required." id="TimeZone" name="TimeZone">
<option value="-10">(GMT -10:00) Hawaii</option>
<option value="-9">(GMT -9:00) Alaska</option>
<option value="-8">(GMT -8:00) Pacific Time</option>
<option value="-7">(GMT -7:00) Mountain Time</option>
<option value="-6">(GMT -6:00) Central Time</option>
<option value="-5">(GMT -5:00) Eastern Time</option>
<option selected="selected" value="0">Unknown</option>
</select>
如您所见,未选择“山地时间”。它总是选择“未知”。关于我做错了什么建议?
答案 0 :(得分:2)
看来我忽略了DropDownListFor帮助器的一个重要方面。控件的第一个参数实际上是默认选择的值。
@Html.DropDownListFor(model => model.TimeZone, new SelectList(Model.TimeZoneOptions, "Value", "Key"), new { @class = "form-control" })
因此,当我将模型传递给视图时,应该预先填充正确的默认值,如下所示:
public ActionResult Create()
{
BankUser user = new BankUser();
user.TimeZone = -7;
return View(user);
}
因此,我不再需要原始的CreateViewModel类。
答案 1 :(得分:0)
使用Html.DropDownListFor
时,您将覆盖所选值。如果希望-7作为默认选择(例如创建表单),则默认情况下将Model.TimeZone的值填充为-7。您可以选择使用Html.DropDownList
功能。
@Html.DropDownList("TimeZone", new CreateViewModel().GetUserTimeZoneList("-7"), new { @class = "form-control" })
当然,你会在编辑表格中失去TimeZone的价值。