Asp.Net MVC с выпадающим списком и помощью SelectListItem
Я пытаюсь создать раскрывающийся список, но борюсь с 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) %>
Я получаю следующая ошибка:
элемент ViewData с ключом "SelectedAccountId" имеет тип " System.Int32", но должен иметь тип "IEnumerable".
почему он хочет, чтобы я вернул весь список элементов? Мне просто нужно выбранное значение. Как мне это сделать?
2 ответов
у вас есть модель представления, для которой ваше представление строго типизировано => используйте строго типизированные помощники:
<%= Html.DropDownListFor(
x => x.SelectedAccountId,
new SelectList(Model.Accounts, "Value", "Text")
) %>
Также обратите внимание, что я использую SelectList
для второго аргумента.
и в вашем действии контроллера вы возвращали модель представления, переданную как аргумент, а не тот, который вы построили внутри действия, которое имело свойство 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);
}
Шаг 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-")