2013-10-24 2 views
0

Я новичок в 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> 

Что я могу делать неправильно? Заранее спасибо.

+0

Model.Costs - это список. В DropDownListПри попытке выбранного элемента в поле id. Если вы хотите увидеть выбранный элемент, вам нужно посмотреть на это поле. –

+0

Спасибо за ответ. Но как я могу это сделать? Если я попробую @ Html.DisplayFor (m => m.Id) в представлении «Расчеты», в раскрывающемся списке отобразится значение Id, а не выбранное значение. – user2913657

ответ

0

Если Id - это идентификатор записи, я бы создал выбранное поле в вашей модели. то вы можете сделать что-то вроде

@Html.DropDownListFor(x => x.Selected, Model.Costs). 

Выбранное поле будет заполнено значением выбранной записи. Если вам нужен выделенный текст, вы можете запросить Model.Costs или использовать jquery.

+0

Привет, снова, у меня все еще такая же проблема, несмотря на изменения. Я считаю, что моя модель не связана с моим выпадающим списком. Если возможно, я бы предпочел не использовать jQuery. Любые другие предложения или, возможно, короткая демонстрация? – user2913657

+0

, чтобы вы ничего не видели в своем выпадающем меню? –

Смежные вопросы