2

我在使用 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);
    }

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

谢谢您的帮助!

4

2 回答 2

2

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

于 2011-03-28T21:12:58.923 回答
1

为什么要使用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) %>
于 2011-03-28T21:21:04.950 回答