【问题标题】:SelectList Object selectedValue issueSelectList 对象 selectedValue 问题
【发布时间】:2011-03-28 18:20:51
【问题描述】:

我在使用 SelectedItems 的 selectedValue 选项时遇到问题,由于某种原因,尽管它在列表中,但它不会选择该项目...

我的控制器:

public ActionResult CreateTransformer(string edit)
{    
            var equipment = GenIDQueries.FindEquipment(edit);
            ViewData["Feeder"] = new SelectList(GenIDQueries.GetFeeders(equipment.OpsCentre.ToString()),
                                                "CircuitID",
                                                "CircuitDescription",
                                                equipment.Feeder);
        return View(equipment);
    }

equipment.Feeder 是整数类型。

我的观点:

<p>
                <b><%=Html.LabelFor(m=>m.Feeder) %>:</b><font color="red">*</font>
                <%=Html.DropDownListFor(m=>m.Feeder, ViewData["Feeder"] as SelectList, "") %>
                <%= Html.ValidationMessageFor(m => m.Feeder)%>
            </p>

我的 GenIDQueries.GetFeeders:

public static IEnumerable<Circuit> GetFeeders(string distNo)
        {
            int distNoNumber;
            if ( int.TryParse(distNo, out distNoNumber))
            {
                return ActiveRecordLinq.AsQueryable<Circuit>()
                .Where(x => x.DistrictCircuitRelations
                          .Any(y => y.District.DistrictNo == distNoNumber))
                .OrderBy(x => x.CircuitDescription)
                .Select(x => new Circuit
                {
                    CircuitID = x.CircuitID,
                    CircuitDescription = x.CircuitDescription
                });
            }
            return new List<Circuit>();
        }

我已验证 GenIDQueries 确实返回了我想要选择的元素,但是当页面加载时它从不选择该选项,在 HTML 源代码中,该项目也未选择。

感谢您的帮助!

【问题讨论】:

    标签: asp.net-mvc-2 selectlist


    【解决方案1】:

    设置选定值时,应将其设置为选定的CircuitID,而不是 Feeder 对象。

    【讨论】:

    • 是的。有趣的是,我将新的 Selectlist 放入了一个变量中,它甚至显示该项目已被选中,但是当页面加载时它并没有选择它
    【解决方案2】:

    你为什么使用这个Plague of ViewData?我认为ViewData 是一种病毒,起源于微软开放空间实验室,并通过互联网博客文章和文章传播。

    视图模型是 ASP.NET MVC 的必经之路:

    型号:

    public class MyViewModel
    {
        public string SelectedValue { get; set; }
        public IEnumerable<SelectListItem> Items { get; set; }
    }
    

    控制器:

    public ActionResult CreateTransformer(string edit)
    {    
        var equipment = GenIDQueries.FindEquipment(edit);
        var items = GenIDQueries.GetFeeders(equipment.OpsCentre.ToString());
        var model = new MyViewModel
        {
            SelectedValue = equipement.CircuitID,
            Items = new SelectList(items, "CircuitID", "CircuitDescription")
        };
        return View(model);
    }
    

    查看:

    <%= Html.DropDownListFor(m => m.CircuitID, Model.Items, "") %>
    <%= Html.ValidationMessageFor(m => m.CircuitID) %>
    

    【讨论】:

    • 我同意你的观点,ViewData 是一个瘟疫,我只使用这种方法来调试我的案例。如果我将以下内容放入视图中: new SelectList(GenIDQueries.GetFeeders("1"), "CircuitID", "CircuitDescription", Model.Feeder) SelectList 会找到该项目,并且该项目的“Selected”属性为真,但是当页面加载时,该项目没有被选中
    • 作为 MVC2 的新手,我当然想了解您对 ViewData 的看法。但是发布一个标题为“Plague of ViewData”的链接,该链接指向一篇关于瘟疫的维基百科文章,会让你对我投反对票,因为那是相当误导的。如果您断言应避免使用 ViewData,请详细说明原因,或发布真实的参考资料——如果您这样做,我会将其转为向上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多