Question

Je cherche la meilleure méthode pour créer un menu déroulant modèle de l'éditeur de liste avec MVC. Il semble y avoir différentes méthodes, mais je ne peux pas trouver une méthode qui est le mieux, tout le monde semble le faire différemment. J'utilise MVC3 avec rasoir, donc une méthode qui fonctionne avec ceci est préféré.

Était-ce utile?

La solution

Il y a plusieurs façons et de dire qui est le mieux serait subjectif et pourrait ne pas fonctionner dans votre scénario qui, par la façon dont vous avez oublié de décrire dans votre question. Voici comment je le fais:

Modèle:

public class MyViewModel
{
    public string SelectedItem { get; set; }
    public IEnumerable<Item> Items { get; set; }
}

public class Item
{
    public string Value { get; set; }
    public string Text { get; set; }
}

Contrôleur:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            // TODO: Fetch this from a repository
            Items = new[] 
            {
                new Item { Value = "1", Text = "item 1" },
                new Item { Value = "2", Text = "item 2" },
                new Item { Value = "3", Text = "item 3" },
            }
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        if (!ModelState.IsValid)
        {
            // redisplay the view to fix validation errors
            return View(model);
        }

        // TODO: The model is valid here => 
        // perform some action using the model.SelectedItem 
        // and redirect to a success page informing the user
        // that everything went fine
        return RedirectToAction("Success");
    }
}

Voir (~/Views/Home/Index.cshtml):

@model MyApp.Models.MyViewModel

@{ Html.BeginForm(); }
    @Html.EditorForModel()
    <input type="submit" value="OK" />
@{ Html.EndForm(); }

modèle de l'éditeur (de ~/Views/Home/EditorTemplates/MyViewModel.cshtml):

@model MyApp.Models.MyViewModel

@Html.DropDownListFor(x => x.SelectedItem, 
    new SelectList(Model.Items, "Value", "Text"))

Autres conseils

Personnellement, je pense que les éléments de la liste doivent être placés dans les données de vue pas le modèle de vue, mais cela dépend vraiment si vous affichez un menu déroulant qui ne change jamais (à l'aide des données d'affichage) ou si vous devrez le modifier dynamiquement ( en utilisant un modèle de vue).

Dans l'exemple que vous envoyez des messages le même point de vue modèle à l'action de l'indice. L'action de l'indice est uniquement intéressé par l'élément sélectionné afin pourrait tout simplement changer le paramètre de l'action post-index pour être une chaîne selectedItem. De cette façon, le liant modèle se penchera sur les paramètres de formulaire et remplir le paramètre d'index pour vous.

Aussi, je pense qu'il serait préférable d'adopter une liste des SelectedListItems vers le bas à la vue de cette façon vous pas besoin de convertion et aurait pas besoin de la classe d'objet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top