MVC Sélectionner de la Liste avec le Modèle à la publication, comment?

Je suis en train de créer une vue qui aura besoin de 2 listes déroulantes avec MVC 3. Dans mon autre MVC application, nous avons utilisé la Telerik controls qui a utilisé la méthode Ajax pour charger les données. Maintenant sur ce projet, nous n'utilisons pas de contrôles tiers, donc je vais utiliser le MVC SelectList pour les listes déroulantes. J'ai lu beaucoup d'articles sur la façon de remplir une SelectList mais aucun d'eux de dire deux fois la même chose, toujours d'une manière différente pour créer le modèle, certains utilisent ViewData ou ViewBag de tenir les collections et passer à l'affichage, etc.. pas de cohérence.

Quelle est la meilleure méthode pour remplir une liste déroulante dans un MVC vue qui utilise le modèle lui-même pour les données, pas ViewData. Et lorsque l'utilisateur effectue une sélection dans la liste, présente et la HttpPost action est appelé, comment puis-je accéder à la valeur sélectionnée de la propriété du Modèle de la liste de sélection de la propriété?

C'est mon Modèle actuel:

public class TemporaryRegistration {
    [Required]
    [Email(ErrorMessage = "Please enter a valid email address.")]
    [Display(Name = "Email address")]
    public string Email { get; set; }

    [Required]
    [Integer]
    [Min(1, ErrorMessage = "Please select an entity type.")]
    [Display(Name = "Entity Type")]
    public IEnumerable<SelectListItem> EntityType { get; set; }

    [Required]
    [Integer]
    [Min(1, ErrorMessage = "Please select an associated entity.")]
    [Display(Name = "Associated Entity")]
    public IEnumerable<SelectListItem> AssociatedEntity { get; set; }
}

C'est mon point de vue actuel, c'est seulement en utilisant TextBoxFor où j'ai besoin d'utiliser les listes déroulantes, comment puis-je les transforme en des listes déroulantes?

@model Web.Models.TemporaryRegistration

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
    <legend>Create New ELM Select User</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.Email)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Email)
            @Html.ValidationMessageFor(model => model.Email)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.EntityType)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.EntityType)
            @Html.ValidationMessageFor(model => model.EntityType)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.AssociatedEntity)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.AssociatedEntity)
            @Html.ValidationMessageFor(model => model.AssociatedEntity)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

C'est mon Poste actuel de l'action:
Comment puis-je obtenir les valeurs sélectionnées?

[HttpPost]
public ActionResult CreateUser(TemporaryRegistration registrationModel) {
    string newRegistrationGUID = string.Empty;
    if (!ModelState.IsValid) {
        return View();
    }

    TemporaryRegistrationEntity temporaryRegistration = null;
    temporaryRegistration = new TemporaryRegistrationEntity(registrationModel.Email, registrationModel.EntityType, registrationModel.AssociatedEntity);
    newRegistrationGUID = temporaryRegistration.Save();
    return Content("New registration was created with GUID " + newRegistrationGUID);
}

OriginalL'auteur CD Smith | 2012-01-05