微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – SelectListItem selected = true不工作在视图中

我有一个性别选择字段( – 选择 –,男,女),我填充在我的控制器.当页面加载时,我希望在加载页面自动选择模型pm.Gender中选择的性别.

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生成.

编辑:不适用于任何浏览器.

任何人都知道可能导致这个问题?任何帮助将不胜感激.

干杯.

编辑:(实施Kaf解决方案后)
好吧,这是我实施Kaf解决方案后所做的.

视图:

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

控制器:

gender = new[] { "Select","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); 
    else
        sli = new SelectList(GetGender(),item);
        //without selectedValue

    genderselectList.Add(sli);
}

ViewData["gender"] = genderselectList;

当我这样做,我得到以下例外:
无法转换类型为“System.Collections.Generic.List`1 [System.Web.Mvc.SelectList]”的对象键入“System.Web.Mvc.SelectList”.

任何人知道我在做错什么?

解决方法

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

模型

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

@model TestModel

@{
    ViewBag.Title = "MyView";
}

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

OUTPUT

选择“女性”选项的下拉菜单

编辑

根据评论,找到以下示例项目的链接

1)https://github.com/prashanth-t/DropdownDemo_BareBones(使用MVC 4空模板,文件大小最小)

2)https://github.com/prashanth-t/DropdownDemo(使用MVC 4互联网应用模板,较大的文件大小)

原文地址:https://www.jb51.cc/csharp/94588.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐