59 votes

dropdownlist définir la valeur sélectionnée dans MVC3 Rasoir

voici mon modèle

 public class NewsCategoriesModel
{
    public int NewsCategoriesID { get; set; }        
    public string NewsCategoriesName { get; set; }
}

mon Contrôleur

public ActionResult NewsEdit(int ID, dms_New dsn)
    {
        dsn = (from a in dc.dms_News where a.NewsID == ID select a).FirstOrDefault();
        var categories = (from b in dc.dms_NewsCategories select b).ToList();
        var selectedValue = dsn.NewsCategoriesID;
        SelectList ListCategories = new SelectList(categories, "NewsCategoriesID", "NewsCategoriesName",selectedValue);


        // ViewBag.NewsCategoriesID = new SelectList(categories as IEnumerable<dms_NewsCategory>, "NewsCategoriesID", "NewsCategoriesName", dsn.NewsCategoriesID);
        ViewBag.NewsCategoriesID = ListCategories;
        return View(dsn);
    }

et puis de mon point de vue

@Html.DropDownList("NewsCategoriesID", (SelectList)ViewBag.NewsCategoriesID)

quand je le lance, la dropdownlist, ne sélectionnez pas la valeur que j'.. c'est toujours en sélectionnant la première option

105voto

Darin Dimitrov Points 528142

Vous devriez utiliser des modèles de vue et oublier ViewBag Pensent de lui, comme si elle n'existait pas. Vous sera plus facile de voir comment les choses vont devenir. Afin de définir un modèle de vue:

public class MyViewModel
{
    public int SelectedCategoryId { get; set; }
    public IEnumerable<SelectListItem> Categories { get; set; } 
}

et puis remplir ce modèle d'affichage du contrôleur:

public ActionResult NewsEdit(int ID, dms_New dsn)
{
    var dsn = (from a in dc.dms_News where a.NewsID == ID select a).FirstOrDefault();
    var categories = (from b in dc.dms_NewsCategories select b).ToList();

    var model = new MyViewModel
    {
        SelectedCategoryId = dsn.NewsCategoriesID,
        Categories = categories.Select(x => new SelectListItem
        {
            Value = x.NewsCategoriesID.ToString(),
            Text = x.NewsCategoriesName
        })
    };
    return View(model);
}

et enfin dans votre utilisation de vue fortement typée DropDownListFor helper:

@model MyViewModel

@Html.DropDownListFor(
    x => x.SelectedCategoryId,
    Model.Categories
)

22voto

Alfonso Muñoz Points 708

juste au cas où quelqu'un vient avec cette question, c'est comment je fais, s'il vous plaît oublier le référentiel de l'objet, je suis en utilisant le Modèle de Référentiel, vous pouvez utiliser votre contexte de l'objet à récupérer les entités. Et aussi, ne pas prêter attention à mes noms d'entité, l'entité type d'Action n'a rien à voir avec un MVC Action.

Contrôleur:

ViewBag.ActionStatusId = new SelectList(repository.GetAll<ActionStatus>(), "ActionStatusId", "Name", myAction.ActionStatusId);

Attention, la dernière variable de la SelectList constructeur est la valeur sélectionnée (objet selectedValue)

Ensuite c'est mon point de vue pour le rendu:

<div class="editor-label">
   @Html.LabelFor(model => model.ActionStatusId, "ActionStatus")
</div>
<div class="editor-field">
   @Html.DropDownList("ActionStatusId")
   @Html.ValidationMessageFor(model => model.ActionStatusId)
</div> 

Je pense que c'est assez simple, j'espère que cela aide! :)

8voto

CXRom Points 21

Eh bien elle est très simple dans le contrôleur vous avez quelque chose comme ceci:

-- Contrôleur

ViewBag.Profile_Id = new SelectList(db.Profiles, "Id", "Name", model.Profile_Id);

--Affichage (Option A)

@Html.DropDownList("Profile_Id")

--Affichage (Option B) --> Envoyer une valeur null à la liste

@Html.DropDownList("Profile_Id", null, "-- Choose --", new {  @class = "input-large" })

5voto

Uriah Blatherwick Points 176

Je veux mettre la bonne réponse ici, juste au cas où d'autres utilisateurs ont ce problème, comme je l'ai été. Si vous détestez le ViewBag, l'amende ne l'utilisez pas, mais le vrai problème avec le code de la question est que le même nom est utilisé pour le modèle de la propriété et de la selectlist comme l'a souligné @RickAndMSFT

Il suffit de changer le nom du contrôle DropDownList devrait résoudre le problème, comme suit:

@Html.DropDownList("NewsCategoriesSelection", (SelectList)ViewBag.NewsCategoriesID)

Il n'a pas vraiment rien avoir à faire avec l'aide de la ViewBag ou non à l'aide de la ViewBag que vous pouvez avoir un nom de collision avec le contrôle, peu importe.

4voto

Stuart Points 45896

Je préfère le lambda forme de la DropDownList helper - voir MVC 3 Mise en Page, Modèle de Rasoir, et DropdownList

Si vous souhaitez utiliser le SelectList, alors je pense que ce rapport de bug pourrait aider - http://aspnet.codeplex.com/workitem/4932

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X