Я новичок в MVC 4, поэтому это, вероятно, ошибка новичка. У меня возникли проблемы с привязкой моего выпадающего списка к моей модели. Я пытаюсь отобразить выбор, который пользователь делает из раскрывающегося списка с помощью DropDownListFor. Смотрите следующий код:MVC 4 - Dropdownlist для использования идентификаторов - Получение значения обратной передачи
CostsPerSqFoot Модель:
public class CostsPerSqFoot
{
public List<Prices> RatesList { get; set; }
public CostsPerSqFoot()
{
RatesList = new List<Prices>()
{
new Prices() {Id = 1, Rate = 1.00m},
new Prices() {Id = 2, Rate = 2.00m},
new Prices() {Id = 3, Rate = 5.00m},
new Prices() {Id = 4, Rate = 10.00m}
};
}
}
Цены Модель:
public class Prices
{
public int? Id { get; set; }
public decimal? Rate { get; set; }
}
CostDetails Модель (где я создать список SelectListItem):
public class CostDetails
{
public int? Id { get; set; }
public Measurements Measurements { get; set; }
public List<SelectListItem> Costs { get; set; }
public CostDetails()
{
}
public CostDetails(List<Prices> rates)
{
Costs = new List<SelectListItem>();
foreach (var rate in rates)
{
Costs.Add(new SelectListItem()
{
Text =string.Format("{0:c}", rate.Rate), Value = rate.Id.ToString()
});
}
}
}
Здесь находятся мой контроллер Методы ActionResult:
public ActionResult Index()
{
var rates = new CostsPerSqFoot();
var model = new CostDetails(rates.RatesList);
return View(model);
}
[HttpPost]
public ActionResult Calculations(CostDetails model)
{
if (ModelState.IsValid)
return View(model);
else
return View("Index", model);
}
На мой взгляд Index, я следующая форма, которая содержит DropDownList и вид использует модель CostDetails:
@model FlooringCalculatorMVC.Models.CostDetails
// a few lines of HTML
@using (Html.BeginForm("Calculations", "Home", FormMethod.Post))
{
@Html.ValidationSummary()
@Html.LabelFor(m => m.Measurements.Length)
@Html.TextBoxFor(m =>m.Measurements.Length, new {placeholder = "Enter length"})
<br/>
<br/>
@Html.LabelFor(m => m.Measurements.Width)
@Html.TextBoxFor(m =>m.Measurements.Width, new {placeholder = "Enter width"})
<br/>
<br/>
@Html.LabelFor(m => m.Costs)
@Html.DropDownListFor(m =>m.Id, Model.Costs, "- Select a rate -")
<button type="submit">Calculate</button>
}
Наконец, я хотел бы, чтобы отобразить выбранный раскрывающийся вариант, который пользователь при нажатии «отправить». На экране «Расчеты» у меня есть только следующее:
@model FlooringCalculatorMVC.Models.CostDetails
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Calculations</title>
</head>
<body>
<div>
@Model.Costs
</div>
</body>
</html>
Что я могу делать неправильно? Заранее спасибо.
Model.Costs - это список. В DropDownListПри попытке выбранного элемента в поле id. Если вы хотите увидеть выбранный элемент, вам нужно посмотреть на это поле. –
Спасибо за ответ. Но как я могу это сделать? Если я попробую @ Html.DisplayFor (m => m.Id) в представлении «Расчеты», в раскрывающемся списке отобразится значение Id, а не выбранное значение. – user2913657