2012-02-24 27 views
1

我对ASP.NET MVC 2非常陌生,而且我正忙于使用实体模型中的数据填充下拉列表以填充<>。我怀疑我的LINQ可能是错误的,但它并没有伤害找出为什么我的代码不起作用。如何使用实体模型中的数据填充Html.DropDownListFor <>?

我设法预先填充另一个DropDownListFor <>用下面的代码:

 <div class="editor-field"> 
      <% string[] Days = new string[] { "Monday", "Wednesday", "Friday" };%> 
      <%--<%: Html.DropDownList("Delivery Day", new SelectList(Days)) %>--%> 
      <%: Html.DropDownListFor(model => model.DeliveryDay, new SelectList(Days))%> 
      <%: Html.ValidationMessageFor(model => model.DeliveryDay)%> 
     </div> 

我想现在填充列表如下:

 <div class="editor-field"> 
      <% List<string> categoryList = new List<string>(); 
       var categories = from c in Model.Category select c.Category_Category; 
       foreach (object cata in categories) 
       { 
        categoryList.Add(cata.ToString); 
       }%> 
      <%: Html.DropDownListFor(model => model.Category_Category,new SelectList(categoryList))%> 
      <%: Html.ValidationMessageFor(model => model.Category)%> 
     </div> 

这是发生了什么:

找不到源类型为'int?'的查询模式的实现。 '选择'未找到。

我该如何解决这个问题?

回答

3
<div class="editor-field"> 
    <% var categories = Model.Category.ToArray().Select(x => new SelectListItem 
     { 
      Value = x.CategoryId.ToString(), 
      Text = x.CategoryName 
     }); 
    %> 
    <%= Html.DropDownListFor(model => model.Category_Category, categories) %> 
    <%= Html.ValidationMessageFor(model => model.Category) %> 
</div> 

这就是说我认为你错过了整个MVC模式的重点。你永远不应该做那样的事情。一个观点不应该做这样的事情。您不应该将您的EF域模型传递给您的视图。您应该使用视图模型并让您的控制器操作执行必要的查询并准备视图模型。

所以定义视图模式:

public class MyViewModel 
{ 
    public string SelectedCategoryId { get; set; } 
    public IEnumerable<SelectListItem> Categories { get; set; } 
} 

,然后让你的控制器动作构建这个视图模型:

public ActionResult Foo() 
{ 
    var model = new MyViewModel(); 
    model.Categories = db.Category.ToArray().Select(x => new SelectListItem 
    { 
     Value = x.CategoryId.ToString(), 
     Text = x.CategoryName 
    }); 
    return View(model); 
} 

,然后你的观点会被强类型到MyViewModel,你就可以只需显示下拉菜单:

<div class="editor-field"> 
    <%= Html.DropDownListFor(x => x.SelectedCategoryId, Model.Categories) %> 
    <%= Html.ValidationMessageFor(x => x.SelectedCategoryId) %> 
</div> 
+0

谢谢。我仍然在学习如何使用MVC。感谢您指出这一点 – Eon 2012-02-24 12:48:57

+0

我会抓这个,并找到另一个点开始 – Eon 2012-02-24 12:50:19

0

将此用于分类IES

<% 
    var categories = (from c in Model.Category select new SelectListItem 
     { 
      Text = c.Category_Category.ToString(), 
      Value = c.Category_Category.ToString() //or I will recommend using the key 
     }).ToList(); 
%>  

然后

<%: Html.DropDownListFor(model => model.Category_Category, categories)%> 

这将是更好地在你的控制器,并具有独立的视图模型包含List<SelectListItem>类别属性视图来做到这一点。

+0

没有工作:/ – Eon 2012-02-24 12:47:44

+0

对不起,我已经删除了'select'关键字。 – kingpin 2012-02-24 12:50:08

相关问题