1

我在页面中需要一个 DropDownList,所以我尝试这种方式:

行动:

[HttpGet]
public ActionResult GetPoint() {

  ...
  List<SelectListItem> zooms = new List<SelectListItem>();
    for (int i = 0; i <= 21; i++) {
      if (i == 9)
        zooms.Add(new SelectListItem() { Selected = true, Text = i.ToString(), Value = i.ToString() });
      else
        zooms.Add(new SelectListItem() { Selected = false, Text = i.ToString(), Value = i.ToString() });
            }
  model.myselectlist = zooms;
  ...

  return View(model);
}

在视图中:

@Html.DropDownListFor(model => model.Zoom, Model.myselectlist , new { @class = "dropdown" })

因此,正如我所料,我们有一个带有9is Selected Item 的 DropDownList。

但是在同一个视图中我需要另一个 DropDown 所以这是我的实现:

[HttpGet]
public ActionResult GetPoint() {

  ...

  List<SelectListItem> places = new List<SelectListItem>();
  places.Add(new SelectListItem() { Text = "NY", Value = "NY", Selected = false });
  places.Add(new SelectListItem() { Text = "CA", Value = "CA", Selected = false });
  places.Add(new SelectListItem() { Text = "TX", Value = "TX", Selected = false });
  places.Add(new SelectListItem() { Text = "NH", Value = "NH", Selected = true });
  places.Add(new SelectListItem() { Text = "NV", Value = "NV", Selected = false });
  model.myselectlistII = places;

  ...

  return View(model);
}

在视图中我有:

@Html.DropDownListFor(model => model.Place, Model.myselectlistII , new { @class = "dropdown" })

因此,如您所见,我有一个NHItem 具有的列表selected = true

而且我希望有一个下拉列表,该下拉列表已NH选择但未发生,并且始终是第一个选择的项目。

鉴于我有一个奇怪的行为,我在操作末尾和@Html.DropDownListFor视图页面的行首调试代码,一切正常,但在此行之后我再次检查Model.myselectlistII所选项目已更改并且所有项目都已选择财产false,我不明白发生了什么?哪里有问题?为什么第一个DropDownFor没有改变任何东西,但第二个改变了我的清单?你的建议是什么?

4

5 回答 5

0

Samuel Caillerie 是正确的。您正在使用 DropDownList将的属性 Zoom 和 Place 绑定到选择列表。无论这些属性的值是什么,都将在视图呈现时选择。还没有找到一个很好的文档,但是这里有另一个堆栈溢出帖子来帮助支持它:

asp.net mvc 3 预选 Html.DropDownListFor 不在书呆子晚餐中工作

于 2012-12-31T13:02:57.083 回答
0

我在我的一个项目中所做的并且有点用处的是,开发了另外两个
DropDownListFor接受的重载selectedValue

namespace MyMvcApplication.Helpers
{
    public static class ExtensionMethods
    {
        public static MvcHtmlString DropDownListFor<TModel, TProperty>
                             (this HtmlHelper<TModel> helper,
                              Expression<Func<TModel, TProperty>> expression,
                              string selectedValue,
                              IEnumerable<SelectListItem> selectList,
                              string optionLabel,
                              object htmlAttributes)
        {
            if (string.IsNullOrEmpty(selectedValue))
                selectedValue = string.Empty;
            if (selectList != null)
            {
                foreach (SelectListItem sli in selectList)
                {
                    if (sli.Value.ToLower().Trim() == selectedValue.ToLower().Trim())
                    {
                        sli.Selected = true;
                        break;
                    }
                }
            }
            else 
            { 
                selectList = new List<SelectListItem>() 
                                  { new SelectListItem() 
                                          { Text = "", Value = "", Selected = true }
                                  };
            }
            return helper.DropDownListFor(expression, selectList, optionLabel, htmlAttributes);
        }


        public static MvcHtmlString DropDownListFor<TModel, TProperty>
                             (this HtmlHelper<TModel> helper,
                              Expression<Func<TModel, TProperty>> expression,
                              string selectedValue,
                              IEnumerable<SelectListItem> selectList,
                              string optionLabel,
                              IDictionary<string, object> htmlAttributes)
        {
            if (string.IsNullOrEmpty(selectedValue))
                selectedValue = string.Empty;
            if (selectList != null)
            {
                foreach (SelectListItem sli in selectList)
                {
                    if (sli.Value.ToLower().Trim() == selectedValue.ToLower().Trim())
                    {
                        sli.Selected = true;
                        break;
                    }
                }
            }
            else 
            { 
                selectList = new List<SelectListItem>() 
                                  { new SelectListItem() 
                                          { Text = "", Value = "", Selected = true } 
                                  };
            }
            return helper.DropDownListFor(expression, selectList, optionLabel, htmlAttributes);
        }

    }
}

所以在视图中,我可以将一个字符串作为 selectedValue 传递给DropDownListFor,例如:

@using MyMvcApplication.Helpers

@Html.DropDownListFor(model => model.MyData,
                               "Default Value for DropDownList", //Or Model.MySelectedValue
                               Model.MySelectList, null, null)
于 2012-12-31T23:20:03.930 回答
0

请注意是否有同名的查询字符串,它将覆盖该行为,不确定是否有同名的隐藏字段

IE

如果找到 Blockquote ,DropDownListFor 将使用DinnerID的查询字符串的值

于 2013-03-14T16:19:35.943 回答
0

这个问题的解决方案比我们都认为的更简单......

当从控制器返回视图时,我们需要做的就是在视图模型上为下拉绑定到的元素设置属性 - 例如:model.Zoom = 'NH'

这样当我们这样做时

@Html.DropDownListFor(model => model.Zoom, Model.myselectlist , new { @class = "dropdown" })

HtmlHelper 会自动选取默认值显示在 DropDownList

简单!

希望它可以帮助你和所有其他人 - 像我一样!- 已经浪费了很多时间来寻找这个明显问题的解决方案。

于 2014-07-01T10:03:45.143 回答
0

小伙伴们看看吧!!!超级静态功能懒惰的方式来选择/选择/绑定下拉列表用于 mvc razor bootstrap 样式;)作为奖励去插入法语或英语描述!你的改进,但你会很容易得到这个想法。玩得开心!万事通...

              <div class="form-group">
                    <label>@(HttpContext.Current.Session["culture"].ToString().Equals("fr-CA") ? "Quel est votre niveau d'expertise" : "What is your skill level")</label>
                    @if (Model.ClientLevel == null)
                    {
                        <select class="form-control" name="ClientLevel">
                            <option selected value="0">@(HttpContext.Current.Session["culture"].ToString().Equals("fr-CA") ? "Choisir un niveau" : "Choose a level")</option>
                            <option value="1">@(HttpContext.Current.Session["culture"].ToString().Equals("fr-CA") ? "Débutant" : "Beginner")</option>
                            <option value="2">@(HttpContext.Current.Session["culture"].ToString().Equals("fr-CA") ? "Intermédiaire" : "Intermediate")</option>
                            <option value="3">@(HttpContext.Current.Session["culture"].ToString().Equals("fr-CA") ? "Advanced" : "Advanced")</option>
                            <option value="4">@(HttpContext.Current.Session["culture"].ToString().Equals("fr-CA") ? "Expert" : "Expert")</option>
                            <option value="5">@(HttpContext.Current.Session["culture"].ToString().Equals("fr-CA") ? "Autre" : "Other")</option>
                        </select>
                    }
                    else
                    {

                        List<SelectListItem> listItems = new List<SelectListItem>();
                        listItems.Add(new SelectListItem() { Text = "Choose a level", Value = "Choose a level"});
                        listItems.Add(new SelectListItem() { Text = "Beginner", Value = "Beginner" });
                        listItems.Add(new SelectListItem() { Text = "Intermediate", Value = "Intermediate"});
                        listItems.Add(new SelectListItem() { Text = "Advanced", Value = "Advanced"});
                        listItems.Add(new SelectListItem() { Text = "Expert", Value = "Expert"});
                        listItems.Add(new SelectListItem() { Text = HttpContext.Current.Session["culture"].ToString().Equals("fr-CA") ? "Autre" : "Other", Value = "Other"});

                        @Html.DropDownListFor(m => m.ClientLevel, listItems, new { @class = "form-control" })
                    }
                </div>
于 2016-04-08T13:45:20.597 回答