2011-08-22 15 views
105

Mam problem z DropDownListFor w mojej aplikacji MVC3. Byłem w stanie użyć StackOverflow, aby dowiedzieć się, jak sprawić, aby pojawiły się w Widoku, ale teraz nie wiem, jak uchwycić wartości w odpowiednich właściwościach w Modelu Podglądu, gdy jest on przesłany. Aby to zadziałało, musiałem stworzyć wewnętrzną klasę, która miała identyfikator i właściwość wartości, a następnie musiałem użyć IEnumerable<Contrib>, aby spełnić wymagania parametrów DropDownListFor. Teraz jednak, w jaki sposób MVC FW ma odwzorowywać wartość wybraną z tego menu rozwijanego na powrót do prostej właściwości ciągu w moim modelu widoku?MVC3 DropDownListFor - prosty przykład?

public class MyViewModelClass 
{ 
    public class Contrib 
    { 
     public int ContribId { get; set; } 
     public string Value { get; set; } 
    } 

    public IEnumerable<Contrib> ContribTypeOptions = 
     new List<Contrib> 
     { 
      new Contrib {ContribId = 0, Value = "Payroll Deduction"}, 
      new Contrib {ContribId = 1, Value = "Bill Me"} 
     }; 

    [DisplayName("Contribution Type")] 
    public string ContribType { get; set; } 
} 

moim zdaniem I miejsce listy rozwijanej na stronie tak:

<div class="editor-label"> 
    @Html.LabelFor(m => m.ContribType) 
</div> 
<div class="editor-field"> 
    @Html.DropDownListFor(m => m.ContribTypeOptions.First().ContribId, 
      new SelectList(Model.ContribTypeOptions, "ContribId", "Value")) 
</div> 

Kiedy przesłać formularz ContribType jest (oczywiście) null.

Jaki jest prawidłowy sposób to zrobić?

Odpowiedz

157

Powinieneś zrobić tak:

@Html.DropDownListFor(m => m.ContribType, 
       new SelectList(Model.ContribTypeOptions, 
           "ContribId", "Value")) 

Gdzie:

m => m.ContribType 

jest nieruchomość, gdy wartość wynik będzie.

+1

DZIĘKUJĘ !!! Siergiej, to jest dokładnie to, czego szukałem przez wiele godzin. –

+0

Dziękuję :) za odpowiedź Czy istnieje sposób, aby pokazać "- Wybierz--" stąd. ? – kbvishnu

+1

@VeeKeyBee, możesz dodać nowy element do listy 'contribTypeOptions', na przykład' nowy Contrib {ContribId = -1, Value = "Please Select"} 'i pojawi się na liście rozwijanej. Następnie możesz sprawdzić, czy 'ContribType' ma wartość' -1 ', oznacza to, że użytkownik nie wybrał żadnej wartości –

6

Dla wiązania danych dynamicznych w DropDownList można wykonać następujące czynności:

Tworzenie ViewBag w kontrolerze jak poniżej

ViewBag.ContribTypeOptions = yourFunctionValue(); 

teraz użyć tej wartości w widoku jak poniżej:

@Html.DropDownListFor(m => m.ContribType, 
    new SelectList(@ViewBag.ContribTypeOptions, "ContribId", 
        "Value", Model.ContribTypeOptions.First().ContribId), 
    "Select, please") 
6

Myślę, że to pomoże: W kontrolerze uzyskać listę pozycji i wybraną wartość

public ActionResult Edit(int id) 
{ 
    ItemsStore item = itemStoreRepository.FindById(id); 
    ViewBag.CategoryId = new SelectList(categoryRepository.Query().Get(), 
             "Id", "Name",item.CategoryId); 

    // ViewBag to pass values to View and SelectList 
    //(get list of items,valuefield,textfield,selectedValue) 

    return View(item); 
} 

iw świetle

@Html.DropDownList("CategoryId",String.Empty) 
+5

Zazwyczaj nie jest to wzór boga, aby wystawiać swoje repozytorium na Widok w ten sposób. –

0
 @Html.DropDownListFor(m => m.SelectedValue,Your List,"ID","Values") 

Tutaj Wartość jest to, że obiekt modelu, w którym chcesz, aby zapisać wybraną wartość