SelectList Object selectedValue问题

时间:2011-03-28 18:20:51

标签: asp.net-mvc-2 selectlist

我遇到了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的类型为Integer。

我的观点:

<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源代码中,也没有选择该项。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

为什么使用此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) %>