2013-12-08 4 views
0

Я только начинаю работать в ASP.NET MVC, и мне было сложно с свойством @ Html.DropDownListFor, я не могу обойти его! Надеюсь, что-то добрые люди могут дать мне руку?Путаница над населением DropDownListFor в ASP.NET MVC

Я пытаюсь перестроить эту страницу (http://goo.gl/q7H9Na) в ASP.NET MVC 4. Если бы кто-нибудь мог мне помочь, было бы здорово, если бы вы могли привести пример того, как получить поле «Размер партии» за работой. Я включил то, что мне удалось сделать до сих пор. Спасибо за любую помощь!

вид Модель:

namespace ThePines.ViewModels 
{ 
    public class EnquiryForm 
    { 
     [Required(ErrorMessage = "* Please enter a first name")] 
     public string FirstName { get; set; } 

     [Required(ErrorMessage = "* Please enter a last name")] 
     public string LastName { get; set; } 

     [Required(ErrorMessage = "* Please enter an email address")] 
     [EmailAddress(ErrorMessage = "* Please enter a valid email address")] 
     public string EmailAddress { get; set; } 

     [Required(ErrorMessage = "* Please enter a country")] 
     public string Country { get; set; } 

     [Required(ErrorMessage = "* Please enter a question")] 
     public string Question { get; set; } 
    } 
} 

Вид:

@using (Html.BeginForm("Index", "Enquiries", FormMethod.Post, new { enctype = "multipart/form-data"})) 
{ 
    @Html.ValidationSummary(true) 

    <fieldset> 
     <table cellpadding="8" cellspacing="8"> 
      <tr> 
       <td>@Html.LabelFor(model => model.FirstName, "First Name")</td> 
       <td>@Html.TextBoxFor(model => model.FirstName)</td> 
       <td>@Html.ValidationMessageFor(model => model.FirstName)</td> 
      </tr> 

      <tr> 
       <td>@Html.LabelFor(model => model.LastName, "Last Name")</td> 
       <td>@Html.TextBoxFor(model => model.LastName)</td> 
       <td>@Html.ValidationMessageFor(model => model.LastName)</td> 
      </tr> 

      <tr> 
       <td>@Html.LabelFor(model => model.EmailAddress, "Email Address")</td> 
       <td>@Html.TextBoxFor(model => model.EmailAddress)</td> 
       <td>@Html.ValidationMessageFor(model => model.EmailAddress)</td> 
      </tr> 

      <tr> 
       <td>@Html.LabelFor(model => model.Country, "Country")</td> 
       <td>@Html.TextBoxFor(model => model.Country)</td> 
       <td>@Html.ValidationMessageFor(model => model.Country)</td> 
      </tr> 

      <tr> 
       <td>@Html.LabelFor(model => model.PartySize, "Party Size")</td> 
       <td>@Html.DropDownListFor()</td> 
       <td>@Html.ValidationMessageFor(model => model.PartySize)</td> 
      </tr> 

      <tr> 
       <td>@Html.LabelFor(model => model.Question, "Question")</td> 
       <td>@Html.TextBoxFor(model => model.Question)</td> 
       <td>@Html.ValidationMessageFor(model => model.Question)</td> 
      </tr> 
     </table> 

     <input type="submit" value="Send Enquiry" /> 
    </fieldset> 
} 

Контроллер:

public class EnquiriesController : Controller 
{ 
    // 
    // GET: /Enquiries/ 

    public ActionResult Index() 
    { 

    } 

    // POST: /Enquiries/ 

    [HttpPost] 
    public ActionResult Index(EnquiryForm enquiryForm) 
    { 
     if (ModelState.IsValid) 
     { 

     } 

     return View(enquiryForm); 
    } 
} 

ответ

0

Прежде всего, вам нужно добавить свойство PartySize к вашему ViewModel:

public int PartySize { get; set; } 

Затем в вашем контроллере у вас будет:

public ActionResult Index() 
{ 
    var model = new EnquiryForm(); 

    ViewBag.PartySizes = Enumearable.Range(1, 8); 
    return View(model); 
} 

И, на ваш взгляд, вы будете иметь:

<tr> 
    <td>@Html.LabelFor(model => model.PartySize, "Party Size")</td> 
    <td>@Html.DropDownListFor(model => model.PartySize, new SelectList(ViewBag.PartySizes))</td> 
    <td>@Html.ValidationMessageFor(model => model.PartySize)</td> 
</tr> 
+0

Спасибо большое, это сработало отлично !! – smclintock

-1

Создать один класс под названием

public class KeyValuePair 
{ 
    public string Text; 
    public string Text; 
} 

В Get Index Действие

List<KeyValuePair> keyValuePair = new List<KeyValuePair>(); //Add your drop down values into this list 
ViewBag.PartySize= new SelectList(keyValuePair, "Value", "Text", selectedValue: id); 

На странице Просмотр

<td>@Html.LabelFor(model => model.PartySize, "Party Size")</td> 
<td>@Html.DropDownList("PartySize",(SelectList)ViewBag.PartySize)</td> 
<td>@Html.ValidationMessageFor(model => model.PartySize)</td> 
+0

Там нет необходимости создающих e - класс KeyValuePair. – ataravati

0

Я делаю это через ViewBag, но я держу SelectList инстанцирования код, где он должен быть, в контроллере. Вот пример; Я надеюсь, что это помогает:

В View

@Html.DropDownListFor(model => model.PartySize, ViewBag.Sizes as SelectList, "Party Size") 

В ViewModel (добавить)

public int PartySize { get; set; } 

В контроллере

List<int> Sizes = new List<int>(); 

     for(int i = 1; i < 9; i++) 
     { 
      Sizes.Add(i); 
     } 

     ViewBag.Sizes = new SelectList(Sizes); 
Смежные вопросы