【问题标题】:Setting Default Value in Html.DropDownList Helper在 Html.DropDownList Helper 中设置默认值
【发布时间】:2014-01-31 00:19:19
【问题描述】:

我已搜索但未能成功在下拉列表中选择默认值。

以下属性不在我的 MVC 项目中,它在我的核心中。因此,我不想引用 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>

如您所见,“山地时间”没有被选中。它总是选择“未知”。关于我做错了什么有什么建议吗?

【问题讨论】:

    标签: c# asp.net asp.net-mvc-5 html.dropdownlistfor selectlist


    【解决方案1】:

    看来我忽略了 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 类。

    【讨论】:

      【解决方案2】:

      当您使用Html.DropDownListFor 时,您将覆盖所选值。如果您希望 -7 作为默认选择(例如创建表单),则默认将 Model.TimeZone 的值填充为 -7。您可以选择使用Html.DropDownList 函数。

      @Html.DropDownList("TimeZone", new CreateViewModel().GetUserTimeZoneList("-7"), new { @class = "form-control" })
      

      当然,那么您将在编辑表单上丢失 TimeZone 的值。

      【讨论】:

      • 谢谢,但我找到了问题的答案。见上文。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-23
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多