2012-10-30 28 views
0

我有下面的代码填充下拉列表。有没有什么办法可以在以下dropdownlist值

private void PopulateCustStatus() 
{ 
    ViewData["custStatus"] = new HEntities().COptions 
     .Select(e => new ConfOptModel 
      { 
       OptID = e.OptID, 
       OptName = e.OptName, 
       ConfigTypeID = e.ConfigTypeID 
      }) 
     .Where(e => e.ConfigTypeID == 2) 
     .OrderBy(e => e.OpName); 
} 
+0

什么是呈现您的下拉列表? ASP.NET MVC?的WinForms?您在“选择价值”中需要什么价值? –

+0

@IainGalloway我只能在System.Web.Mvc命名空间中找到ViewData,所以我猜这是MVC http://msdn.microsoft.com/en-us/library/system.web.mvc.viewpage.viewdata(v = vs108).aspx 编辑:Woops SharePoint以及(http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.view.viewdata.aspx)...显然我吸。 –

回答

0

我想你所要做的事情的问题是你的“无选择”选项(例如“选择值”)与在PopulateCustStatus()中创建的模型没有相同的“形状”。

可能要使用IEnumerable<SelectListItem>: -

var selectList = 
    new HEntities().COptions 
    .Where(e => e.ConfigTypeID == 2) 
    .OrderBy(e => e.OpName) 
    .Select(e => new SelectListItem() 
    { 
     Text = e.OptName, 
     Value = e.OptID, 
     Selected = false 
    }); 

这给你一点点更多的灵活性。然后你就可以像上面插入一个“选择价值”的项目: -

var noSelection = new SelectListItem() 
{ 
    Text = "Select value", 
    Value = 0, 
    Selected = true 
}; 

ViewData["selectedCustStatus"] = 
    new[] { noSelection }.Concat(selectList); 

注意:如果要保留以前选择的值,你就必须把它传递到函数,并确保匹配SelectListItem将其Selected属性设置为true

希望这会有所帮助!

+0

谢谢伊恩你的样品 – Spidey

0

添加一个名为“选择价值”的项目你返回ConfOptModel对象的列表,所以除非有指示“选择”值,那么你不能属性。

如果我不为View专门创建的模型(即使用域对象的,而不是一个“视图模型”,“模式”),我通常选择的项目添加到视图状态:

ViewData["selectedCustStatus"] = selectedID; 

然后在标记中创建DropDownList时使用该值。

另一种选择是返回SelectListItem对象的列表,而不是域(ConfOptModel)对象。这会在控制器中放置一些视图逻辑,以便使用更适合的方式。

+0

@ Ian,是的,就像Thomas提到的那样是ASP.NET MVC,我想要的价值是0 @D Stanley,你能不能请elaborale ?.现在让我们说PopulateCustStatus将在下拉列表中返回Test,Test2,Test,因此我想在测试的顶部添加Select值。你能否告诉我如何。谢谢 – Spidey