Вопрос

Я ищу лучший способ создания шаблона редактора раскрывающегося списка с помощью MVC.Кажется, существуют разные методы, но я не могу найти лучшего, кажется, все делают это по-разному.Я также использую MVC3 с Razor, поэтому предпочтительным является метод, который работает с этим.

Это было полезно?

Решение

Есть много способов и говорят, что является лучшим будет субъективным и может не работать в вашем сценарии, который к тому, как вы забыли описать в вашем вопросе. Вот как я это делаю:

Модель:

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

Контроллер:

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

Вид (~/Views/Home/Index.cshtml):

@model MyApp.Models.MyViewModel

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

Шаблон редактора (~/Views/Home/EditorTemplates/MyViewModel.cshtml):

@model MyApp.Models.MyViewModel

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

Другие советы

Это мой подход с этого поста:

Один Editortemplate для всех DropDownlists в ASP.NET MVC

Лично я считаю, что элементы списка следует размещать в данных представления, а не в модели представления, но на самом деле это зависит от того, отображаете ли вы раскрывающийся список, который никогда не меняется (используя данные представления), или вам придется изменять его динамически (используя представление). модель).

В примере вы публикуете ту же модель представления в индексном действии.Действие index интересуется только выбранным элементом, поэтому можно просто изменить параметр действия index post на строку selectedItem.Таким образом, связующее устройство модели изучит параметры формы и заполнит для вас параметр индекса.

Кроме того, я думаю, что было бы лучше передать список SelectedListItems в представление, чтобы вам не требовалось никаких преобразований и не требовался класс Item.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top