SelectListItem selected = true在视图中不起作用 [英] SelectListItem selected = true not working in view

查看:272
本文介绍了SelectListItem selected = true在视图中不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个性别选择字段(--Select-,Male,Female),并在控制器中进行填充.页面加载时,我希望页面加载时自动选择在模型pm.Gender中选择的性别.

I have a gender select field (--Select--, Male, Female) and I'm populating that in my controller. When the page loads, I want the gender that is selected in the model pm.Gender to be automatically selected when the page loads.

pm.Gender中的值返回为:

  • "
  • "M"
  • "F"

查看:

<%: Model.Gender %>
<%: Html.DropDownListFor(m => m.Gender, (IEnumerable<SelectListItem>)ViewData["gender"], new { @class = "span2" })%>

控制器:

gender = new[] { "Select", "Male", "Female" };
List<SelectListItem> genderselectList = new List<SelectListItem>();
foreach (string item in gender)
{
   SelectListItem sli = new SelectListItem { Text = item, Value = item };

   if (item.Trim().StartsWith(pm.Gender))
      sli.Selected = true;

   genderselectList.Add(sli);
}

ViewData["gender"] = genderselectList;

调试应用程序后,我可以看到genderselectList包含正确的数据,而Selected = true包含应该被选择的正确值.但是,在页面加载时,在下拉列表中未选择任何由Html.DropDownListFor生成的内容.

After debugging the application, I can see that genderselectList contains the proper data with Selected = true for the proper value that is supposed to be selected. But when the page loads, nothing is selected in the dropdown list that was supposed to be generated with the Html.DropDownListFor.

编辑:在任何浏览器中均不起作用.

Does not work in any browser.

任何人都知道可能导致此问题的原因吗?任何帮助,将不胜感激.

Anyone know what could be causing this problem? Any help would be appreciated.

干杯.

(在实施Kaf解决方案之后)
好的,这就是实现Kaf解决方案后我正在做的事情.

(After implementing Kaf's solution)
Ok so this is what I'm doing after implementing Kaf's solution.

查看:

<%: Html.DropDownListFor(m => m.Gender, (SelectList)(ViewData["gender"]), new { @class = "span2" }) %>

控制器:

gender = new[] { "Select", "Male", "Female" };
List<SelectList> genderselectList = new List<SelectList>();
foreach (string item in gender)
{
    SelectList sli;

    if (item.Trim().StartsWith(pm.Gender))
        sli = new SelectList(GetGender(), item, item, item); 
    else
        sli = new SelectList(GetGender(), item, item);
        //without selectedValue

    genderselectList.Add(sli);
}

ViewData["gender"] = genderselectList;

执行此操作时,出现以下异常:
Unable to cast object of type 'System.Collections.Generic.List`1[System.Web.Mvc.SelectList]' to type 'System.Web.Mvc.SelectList'.

When I do that, I get the following exception:
Unable to cast object of type 'System.Collections.Generic.List`1[System.Web.Mvc.SelectList]' to type 'System.Web.Mvc.SelectList'.

有人知道我在做什么错吗?

Anyone know what I'm doing wrong?

推荐答案

我建议最好为SelectList使用强类型属性(而不是使用ViewBag/ViewData).我相信您所期望的是您的下拉列表将通过模型中的性别选择进行预先选择.这是一个解决方案(代码不是100%干净的.但这可以工作)

I suggest it's better if you use strongly typed property for SelectList (rather than using ViewBag/ViewData). I believe what you are expecting is that your dropdownlist to be pre-selected with the gender selection made in the model. Here is a solution (code is not 100% clean. But this will work)

型号

public class TestModel
{
    public string Gender { get; set; }

    public IEnumerable<SelectListItem> GenderList
    {
        get
        {
            List<SelectListItem> list = new List<SelectListItem> { new SelectListItem() { Text = "Select", Value = "Select" }, new SelectListItem() { Text = "Male", Value = "Male" }, new SelectListItem() { Text = "Female", Value = "Female" } };
            return list.Select(l => new SelectListItem { Selected = (l.Value == Gender), Text = l.Text, Value = l.Value });
        }
    }
}

控制器动作

public ActionResult MyView()
{
    TestModel m = new TestModel();
    m.Gender = "Female";
    return View(m);
}

MyView.cshtml

MyView.cshtml

@model TestModel

@{
    ViewBag.Title = "MyView";
}

<h2>MyView</h2>
@using (Html.BeginForm())
{
    <div>
          @Html.DropDownListFor(model => model.Gender, Model.GenderList)
    </div>
}

输出

下拉菜单中选择了女性"选项

dropdown with 'Female' option selected

编辑

基于评论,可在下面找到示例项目的链接

Based on comments find below links to sample projects

1) https://github.com/prashanth-t/DropdownDemo_BareBones (使用MVC 4空模板.较小的文件大小,几乎没有最小值)

1) https://github.com/prashanth-t/DropdownDemo_BareBones (Using the MVC 4 empty template. Smaller file size with bare minimum)

2) https://github.com/prashanth-t/DropdownDemo (使用MVC 4 Internet应用程序模板.文件更大)

2) https://github.com/prashanth-t/DropdownDemo (Using the MVC 4 internet application template. Bigger file size)

这篇关于SelectListItem selected = true在视图中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆