2011-03-28 27 views
2

我在与SelectedItems的了selectedValue选择的烦恼,由于某种原因,它不会尽管它在列表中被选择的项目......的SelectList对象了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

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

+0

啊这是。有趣的是,我把新的Selectlist放到一个变量中,它甚至显示这个项目被选中,但是当页面加载时它不会选择它 – ChickSentMeHighE 2011-03-29 12:01:30

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) %> 
+0

我同意你说ViewData是一个瘟疫,我只用这个方法调试我的情况。如果我将以下内容放入View:new SelectList(GenIDQueries.GetFeeders(“1”),“CircuitID”,“CircuitDescription”,Model.Feeder)中,SelectList将查找该项目,并且该项目的“Selected”属性为true,但是当页面加载项目没有被选中时 – ChickSentMeHighE 2011-03-29 12:15:56

+0

作为MVC2的新手,我当然想要了解你对ViewData的看法。但是发布一篇名为“ViewData的瘟疫”的链接,链接到一篇关于瘟疫的维基百科文章,让你得到我的低评价,因为这是相当不正确的。如果你断言应该避免使用ViewData,请详细说明为什么,或者发布一个真实的参考资料 - 如果你这样做,我会尽量减少。 – Faust 2011-04-19 12:12:13