2012-12-18 147 views
0

宁可用基于查找表的查询填充下拉列表,是否有办法将查询中的所有记录作为数据源并简单地“转到”记录这将在查询中找到?ASP.NET下拉列表

感谢

+0

这是一个问题,用文本框替换下拉菜单。如果是这样,这取决于要求。 – Sunny

+0

您可以将查询结果作为字典缓存在会话/应用程序状态中,但我不确定这是否是您要求的。 – mcknz

回答

0

我走赃物在这里,但它听起来像是你有一个从数据库未来对象的集合(为参数的缘故,让我们说员工)和你想有一个下拉将填充与该集合中的一个字段。你可以用Linq来完成。

var emps = from e in db.Employees 
      select e; 

var ddlSource = emps.Select(x => 
          new ListItem { 
               Text = x.LastName + ", " + x.FirstName, 
               Value = x.ID 
             }; 

然后你可以绑定你的DropDownList到ddlSource IQueryable。

+0

这正是我正在做的 - 当我做选择我回来,说3条记录,我仍然希望所有记录可用列表中,但有第一个'找到'记录作为列表中选定的项目 - 如果这是有道理的..... – DarkW1nter

+0

这听起来好像你有2个独立的来源。一个匹配过滤标准,一个是所有可能性列表。如果记录数量不是很大,则可以在原始查询之后执行过滤器,这种方式可以基于较大的查询来下拉,但您的过滤结果可以单独应用。 –

+0

那么,它需要2个数据源呢?除了例如在MS Access中执行此操作,您将根据查询获取下拉列表,然后运行DLookup(),并且下拉菜单中的值将是该操作的结果,但如果您单击它,则原始来源还在吗? – DarkW1nter

0

我想你已经选择了数据库中的项目,并希望在填充下拉列表时选择它。考虑例如

视图模型

public class TestVM 
{ 
     public int CategoryId { get; set; } 
     public IEnumerable<SelectListItem> Categories { get; set; } 
} 

下方。在控制器

public ActionResult Index() 
{ 
      TestVM objTestVM = new TestVM();    
      objTestVM.Categories = new List<SelectListItem>() { 
       new SelectListItem() { Value="1", Text="Food"}, 
       new SelectListItem() { Value="2", Text="Movie"} 
      }; 
      objTestVM.CategoryId = 2;//get this value from DB 
      return View(objTestVM); 
} 

在View

@model MvcApplication4.Models.TestVM 
@using(Html.BeginForm()) 
{ 
@Html.DropDownListFor(m => m.CategoryId, Model.Categories, "--select--") 
<input type="submit" value="submit" /> 
} 

现在自动在其值为2在这种情况下,下拉选择类别。如果选择了其他类别并提交该页面,则新的类别标识将被发回到控制器后操作。