2011-01-28 18 views
11

私は、DropDownListコントロールを構築しようとしているが、Html.DropDownListレンダリングと戦っています。ドロップダウンリストでAsp.Net MVC、およびSelectListItem援助

私はクラスがあります。

public class AccountTransactionView 
{ 
    public IEnumerable<SelectListItem> Accounts { get; set; } 
    public int SelectedAccountId { get; set; } 
} 

基本的には今の私の見解モデルです。 Accountsのリスト、および選択された項目を返すためのプロパティ。私のコントローラで

、私はこのようなデータが準備:

public ActionResult AccountTransaction(AccountTransactionView model) 
{ 
    List<AccountDto> accounts = Services.AccountServices.GetAccounts(false); 

    AccountTransactionView v = new AccountTransactionView 
    { 
     Accounts = (from a in accounts 
        select new SelectListItem 
        { 
         Text = a.Description, 
         Value = a.AccountId.ToString(), 
         Selected = false 
        }), 
    }; 

    return View(model); 
} 

今問題:

<%=Html.DropDownList("SelectedAccountId", Model.Accounts) %> 
:私はその後、私の見解では、ドロップダウンを構築しようとしています

キー「SelectedAcを持って

ViewDataをアイテム:

私は、次のエラーを取得していますcountId 'は' System.Int32 '型ですが、' IEnumerable '型でなければなりません。

なぜそれは私が項目のリスト全体を返すようにしたいですか?私はちょうど選択された値が欲しい。私はこれをどのようにしなければならないのですか?また、私は第二引数にSelectListを使用していることに気づく

<%= Html.DropDownListFor(
    x => x.SelectedAccountId, 
    new SelectList(Model.Accounts, "Value", "Text") 
) %> 

答えて

23

あなたはビューモデルビューが強く型付けされた=>使用強く型付けされたヘルパーを持っています。

そして、あなたのコントローラのアクションには、ビューの引数として渡されたモデルではなく、あなたが、これが問題になることができるように正しくセットアップアカウントのプロパティを持っていたアクション内で構築さ1を返しました。私はそれを少し掃除しました:

public ActionResult AccountTransaction() 
{ 
    var accounts = Services.AccountServices.GetAccounts(false); 
    var viewModel = new AccountTransactionView 
    { 
     Accounts = accounts.Select(a => new SelectListItem 
     { 
      Text = a.Description, 
      Value = a.AccountId.ToString() 
     }) 
    }; 
    return View(viewModel); 
} 
+0

ありがとう@ダーリンディミトロフ - それはうまくいった - しかし、私の試みで何が間違っていたのか分かりません。多分説明することができますか? – Craig

+0

@cdotlister、わからないが、問題は、あなたのコントローラのアクションに間違ったモデルを集めているという事実に関連している可能性があります。 –

+0

ありがとうございます。投稿直後にそれを見つけました。 – Craig

13

ステップ-1:あなたのModelクラス

public class RechargeMobileViewModel 
    { 
     public string CustomerFullName { get; set; } 
     public string TelecomSubscriber { get; set; } 
     public int TotalAmount { get; set; } 
     public string MobileNumber { get; set; } 
     public int Month { get; set; } 
     public List<SelectListItem> getAllDaysList { get; set; } 

     // Define the list which you have to show in Drop down List 
     public List<SelectListItem> getAllWeekDaysList() 
     { 
      List<SelectListItem> myList = new List<SelectListItem>(); 
      var data = new[]{ 
       new SelectListItem{ Value="1",Text="Monday"}, 
       new SelectListItem{ Value="2",Text="Tuesday"}, 
       new SelectListItem{ Value="3",Text="Wednesday"}, 
       new SelectListItem{ Value="4",Text="Thrusday"}, 
       new SelectListItem{ Value="5",Text="Friday"}, 
       new SelectListItem{ Value="6",Text="Saturday"}, 
       new SelectListItem{ Value="7",Text="Sunday"}, 
      }; 
      myList = data.ToList(); 
      return myList; 
     } 
} 

ステップ2:お使いのコントローラのアクションでドロップダウン埋めるために、このメソッドを呼び出し

namespace MvcVariousApplication.Controllers 
    { 
     public class HomeController : Controller 
     { 
      public ActionResult Index() 
      { 
       RechargeMobileViewModel objModel = new RechargeMobileViewModel(); 
       objModel.getAllDaysList = objModel.getAllWeekDaysList(); 
       return View(objModel); 
      } 
    } 
    } 

ステップ-3:ビューのドロップダウンリストを次のように入力します。

@model MvcVariousApplication.Models.RechargeMobileViewModel 
    @{ 
     ViewBag.Title = "Contact"; 
    } 
    @Html.LabelFor(model=> model.CustomerFullName) 
    @Html.TextBoxFor(model => model.CustomerFullName) 

    @Html.LabelFor(model => model.MobileNumber) 
    @Html.TextBoxFor(model => model.MobileNumber) 

    @Html.LabelFor(model => model.TelecomSubscriber) 
    @Html.TextBoxFor(model => model.TelecomSubscriber) 

    @Html.LabelFor(model => model.TotalAmount) 
    @Html.TextBoxFor(model => model.TotalAmount) 

    @Html.LabelFor(model => model.Month) 
    @Html.DropDownListFor(model => model.Month, new SelectList(Model.getAllDaysList, "Value", "Text"), "-Select Day-") 
関連する問題