17 Stimmen

Asp.Net MVC mit Dropdown-Liste und SelectListItem-Unterstützung

Ich versuche, eine Dropdownliste zu erstellen, aber kämpfen mit der Html.DropDownList Rendering.

Ich habe eine Klasse:

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

Das ist im Wesentlichen mein derzeitiges Sichtmodell. Die Liste der Konten, und eine Eigenschaft für die Rückgabe des ausgewählten Elements.

In meinem Controller stelle ich die Daten so bereit:

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);
}

Jetzt das Problem:

Ich versuche dann, das Dropdown in meiner Ansicht zu erstellen:

<%=Html.DropDownList("SelectedAccountId", Model.Accounts) %>

Ich erhalte den folgenden Fehler:

Das ViewData-Element mit dem Schlüssel "SelectedAccountId" ist vom Typ "System.Int32", muss aber vom Typ "IEnumerable" sein.

Warum sollte ich die gesamte Liste zurückschicken wollen? Ich möchte nur den ausgewählten Wert. Wie sollte ich dies tun?

33voto

Darin Dimitrov Punkte 990883

Sie haben ein View-Modell, auf das Ihr View stark typisiert ist => verwenden Sie stark typisierte Helfer:

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

Beachten Sie auch, dass ich eine SelectList für das zweite Argument.

Und in Ihrer Controller-Aktion haben Sie das als Argument übergebene Ansichtsmodell zurückgegeben und nicht das, das Sie innerhalb der Aktion konstruiert haben, die die Eigenschaft "Accounts" korrekt eingestellt hatte, so dass dies problematisch sein könnte. Ich habe es ein wenig bereinigt:

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);
}

17voto

Schritt 1: Ihre Modellklasse

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;
        }
}

Schritt 2: Rufen Sie diese Methode auf, um das Dropdown-Feld in Ihrem Controller zu füllen.

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

Schritt 3: Füllen Sie Ihre Drop-Down-Liste der Ansicht wie folgt aus

 @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-")

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X