2012-04-03 9 views
2

まず、ASP.NET MVCを初めて使用しています。今私は、C#の剃刀ビューでドロップダウンリストを追加しようとしています。質問は、@ Html.DropDownListFor ...にList()を直接割り当てることができますか? MyClassのは、このMVC3のDropDownListFor

public class MyClass 
{ 
    public int ID {get; set;} 
    public string Itemstring {get; set;} 
} 

この

public class MyViewModel 
{ 
    public int ID { get; set; } 
    public List<MyClass> MyClassList {get; set; } 
} 

コントローラのアクションメソッドは、ビューこの

public ActionResult Home() 
{ 
MyViewModel mvm = new MyViewModel() { 
new MyClass() { ID=1, Itemstring="My Item1" }, 
new MyClass() { ID=2, Itemstring="My Item2" }, 
new MyClass() { ID=3, Itemstring="My Item3" } 
} 
} 

のようになりますようにViewModelには行くようになります:私は

の使用方法を確認していないところです
@model xyzNameSpace.Models.MyViewModel 
<div> 
@Html.DropDownListFor(x => x.ID, Model.MyClassList); 
<a href="@Url.Action("Selected")><img src="../../Content/images/selected.gif" alt="Proceed" /> </a> 
</div> 

- ユーザーがドロップダウンから1つのアイテムを選択してイメージをクリックすると、コントロール内で '選択された'アクションが呼び出される(または使用するワードがわからない)必要があり、選択した値でモデルをバインドする必要があります。これをやる方法を教えてください...?

ありがとうございます シリ。

+0

だから、あなたが "進んで" ときにサーバーにドロップダウンリストから選択した項目を投稿したいですボタンをクリックしますか? –

答えて

4

Html.DropDownListForは6つのオーバーロードがあり、それらのすべては、あなたの値を保持するパラメータとしてIEnumerable<SelectListItem>を取ります。あなたは自分のクラスをdirreclyで使用することはできません。なぜカイルによって解決しようとしたときにそのエラーが発生するのですか?

は、モデルにこれを追加します。

public List<SelectListItem> ListToUse { get; set; } 

コントローラー:ビューで

MyViewModel model = new MyViewModel(); 
model.MyClassList = new List<MyClass> 
{ 
    new MyClass() { ID=1, Itemstring="My Item1" }, 
    new MyClass() { ID=2, Itemstring="My Item2" }, 
    new MyClass() { ID=3, Itemstring="My Item3" } 
} 
model.ListToUse = model.MyClassList 
    .Select(x => new SelectListItem{ Value = x.ID, Text = x.Itemstring }) 
    .ToList(); 

@Html.DropDownListFor(x => x.ID, Model.ListToUse); 

私はこのコードをテストしていません。

+0

これはうまくいっているようですが、「選択された」アクションパラメータではどうなりますか? – siri

+0

私はそれが 'MyViewModel'であることを意味しますか、それともIntとして選択されたIDだけですか? – siri

+0

私はその質問を理解していますか分かりません。あなたのフォームをポストすると、 'model.ID'に選択した値が入力されます。 – Dmitry

0

私が正しく理解している場合は、[続行]ボタンをクリックしたときに、ドロップダウンリストからサーバーに選択したアイテムを投稿しますか?

これを行うには、フォームを使用する必要があります。

@model xyzNameSpace.Models.MyViewModel 
@using(Html.BeginForm()) 
{ 
    <div> 
    @Html.DropDownListFor(x => x.ID, Model.MyClassList); 

    <input type="submit" value="Proceed" /> 
    </div> 
} 
+0

はい、それは私がしたいことです。しかし、あなたのコードをコンパイルすると、次のエラーがスローされます。 – siri

+0

..... MyViewModelには、 'DropDownListFor'と最善の拡張メソッドオーバーロードの定義が含まれていません。 – siri

+0

エラーCS1928: 'System.Web.Mvc.HtmlHelper 'に 'DropDownListFor'の定義が含まれていません と最適な拡張メソッドオーバーロード 'System.Web .Mvc.Html.SelectExtensions。DropDownListFor (System.Web.Mvc.HtmlHelper 、System.Linq.Expressions.Expression >、 System.Collections.Generic.IEnumerable ) 'に無効な引数があります – siri

0
モデルで

public class modelname 
      { 
       public selectlist getdropdown() 
       { 
        IEnumerable<SelectListItem> EntityList = edmx.tblEntities.AsEnumerable().Select(a => new SelectListItem { Text = a.name, Value = a.id.ToString() }).ToList(); 
        return new SelectList(EntityList, "Value", "Text");    

} 
     } 
ビューで

@Html.DropDownListFor(model => model.source_entity, Model.getdropdown(), "--Select--") 
contollerで

public ActionResult home() 
     { 
      return View(new modelname()); 
     } 
関連する問題