2012-02-24 6 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

+0

私はこれを傷つけ、別のポイントを見つけて – Eon

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

+0

申し訳ありませんが、誤って 'select'キーワードを削除しました。 – kingpin

関連する問題