Domanda

Sto cercando il metodo migliore per la creazione di un menu a discesa modello di elenco editore con MVC. Sembra che ci siano vari metodi, ma non riesco a trovare un metodo che è meglio, tutti sembrano farlo in modo diverso. Sto usando MVC3 con il rasoio e, in modo un metodo che funziona con questo è preferito.

È stato utile?

Soluzione

Ci sono molti modi e da dire che è la cosa migliore sarebbe soggettivo e potrebbe non funzionare nello scenario che tra l'altro si è dimenticato di descrivere nella sua interrogazione. Ecco come lo faccio:

Modello:

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; }
}

Controller:

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");
    }
}

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

@model MyApp.Models.MyViewModel

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

editor di modelli (~/Views/Home/EditorTemplates/MyViewModel.cshtml):

@model MyApp.Models.MyViewModel

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

Altri suggerimenti

Questo è il mio approccio da questo post:

Un'EditorTemplate per tutti DropDownList in ASP.Net MVC

Personalmente ritengo che gli elementi della lista devono essere collocati nella visualizzazione dati non il modello vista ma in realtà dipende se si sta visualizzando un menu a discesa che non cambia mai (utilizzando i dati view) o se si dovrà modificare in modo dinamico ( utilizzando un modello di vista).

Nell'esempio stai scrivendo la stessa vista modello per l'azione index. L'azione index è interessato solo l'elemento selezionato in modo potrebbe semplicemente modificare il parametro della azione index post per essere una stringa selectedItem. In questo modo il modello legante esaminerà i parametri di forma e popolare il parametro index per voi.

Inoltre, penso che sarebbe meglio passare un elenco di SelectedListItems verso il basso per la vista in questo modo non si avrebbe bisogno di alcuna conversione e non avrebbe bisogno la classe Item.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top