16

ドロップダウンリストを作成しようとしていますが、Html.DropDownListレンダリングと戦っています。

私はクラスを持っています:

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

これが基本的に今のところ私のビューモデルです。アカウントのリスト、および選択したアイテムを返すためのプロパティ。

私のコントローラーでは、次のようにデータを準備します。

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) %>

次のエラーが発生します。

キー「SelectedAccountId」を持つViewDataアイテムのタイプは「System.Int32」ですが、タイプは「IEnumerable」である必要があります。

アイテムのリスト全体を返品する必要があるのはなぜですか?選択した値が欲しいだけです。これをどのように行うべきですか?

4

2 に答える 2

33

ビューが強く型付けされているビューモデルがあります=>強く型付けされたヘルパーを使用します:

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

SelectListまた、2番目の引数にaを使用していることに注意してください。

また、コントローラーアクションでは、引数として渡されたビューモデルを返していましたが、Accountsプロパティが正しく設定されているアクション内で構築したものではないため、問題が発生する可能性があります。私はそれを少しきれいにしました:

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);
}
于 2011-01-28T22:31:32.513 に答える
17

ステップ-1:モデルクラス

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-")
于 2014-06-27T13:39:25.470 に答える