Simplu DropDownList în MVC3

Lucrez la prima mea aplicație MVC3. Am o vizualizare simplă care are 2 obiecte (obiect A, obiect B). Obiectul B este opțional. Am creat un model cu ambele obiecte și am controlul care funcționează foarte bine trecând datele înainte și înapoi în Vedere.

I'm trying to put in a simple DropDownList for the user to decide whether they want to enter data for object B. The dropdown list is simple - two values "Yes" and "No".
Ex: Continue with Part "B"?
[Yes]
[No]

În Vizualizare, utilizatorul completează toate elementele de formă ale obiectului A. Apoi, au posibilitatea de a completa elementele obiectului B. Vreau să le selecteze "Da" dacă doresc să facă acest lucru (sunt folosind jQuery pentru a afișa mai multe pagini în acel moment).

Întrebarea mea: Cum pot face o listă de lansare simplă (sau chiar un tip de bază de intrare HTML = "selectare" ...) pe care o pot accesa în Controller după ce trimit formularul?

In my Controller, I want to do the following:
* Do stuff for object A
* Check to see if they selected Yes
* Do stuff for object B

Are ceva atât de simplu ca un Da/Nu dropdown trebuie să intre în model? Nu este tastat de nimic - este doar o decizie făcută de utilizator în Vizualizare. Știu că trebuie să existe un mod simplu de a face acest lucru (ViewBag?) Dar sunt nou și se pare că a fost pierdut.

TL; DR - Cum creez un simplu DropdownList pe o vizualizare pe care o pot accesa în Controller?

0
Ok - pot folosi Request.Form ["ddlChoice"]; în controler și care va funcționa. Este cel mai bun mod de a face acest lucru?
adăugat autor Mike Smith, sursa
vă rugăm să consultați răspunsul meu de mai jos, mă simt ca și cum există mai multe coduri de umflat și este mai predispus la erori dacă utilizați atributele Request.Form în loc să utilizați o clasă puternic tastat. Dacă simțiți că răspunsul de mai jos vă ajută să marcați ca răspuns, aveți unul bun!
adăugat autor likestoski, sursa

2 răspunsuri

Regula de bază pentru obținerea valorilor din vizualizarea înapoi în HTTPPOST pentru obiectul dvs. este de a numi ID-ul și numele proprietăților controalelor de intrare la fel ca și numele proprietății Modele. O modalitate ușoară de a face acest lucru este de a folosi ajutorul Html.

    public class Model
    {
        public Model()
        {
            List options = new List();
            options.Add(new SelectListItem { Value = true.ToString(), Text = "yes" });
            options.Add(new SelectListItem { Value = false.ToString(), Text = "no" });
            ContinueOptions = options;
        }
        public bool Continue { get; set; }
        public IEnumerable ContinueOptions { get; set; }
    }

În vizualizarea dvs.:

@Html.DropDownListFor(m => Model.Continue, Model.ContinueOptions)

În controlerul dvs.:

[HttpPost]
public ActionResult Edit(Model model)
{
    bool continueOn = model.Continue;   

}
2
adăugat

Da, căutarea dvs. ar trebui să fie parte a modelului, altfel controlerul nu va avea răspunsul de la utilizator la Verificați dacă ați selectat Da .

public SomeViewModel
{
  public ObjectA A { get; set; }
  public ObjectB B { get; set; }
  public bool? IsBSelected { get; set; }
}

De obicei, folosesc bool? pur și simplu pentru că îmi place să știu dacă utilizatorul ales pe sau altul, dar folosind bool ar fi bine prea.

0
adăugat