Заполнить выпадающий список в MVC3 - PullRequest
0 голосов
/ 27 февраля 2012

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

Вот что я пробовал:

//Model class:
    public int Id { get; set; }
    public SelectList hobbiename { get; set; }
    public string filelocation { get; set; }
    public string hobbydetail { get; set; }
//Inside Controller
public ActionResult Create()
    {
        var values = new[]
        { 
            new { Value = "1", Text = "Dancing" },
            new { Value = "2", Text = "Painting" }, 
            new { Value = "3", Text = "Singing" },
        };
        var model = new Hobbies
        {
           hobbiename = new SelectList(values, "Value", "Text")
        }; 
        return View();
    } 
//Inside view
 <div class="editor-label">
        @Html.LabelFor(model => model.hobbiename)
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(     x => x.hobbiename,     Model.hobbiename ) 
        @Html.ValidationMessageFor(model => model.hobbiename)
    </div>

Я получаю сообщение об ошибке: System.MissingMethodException: для этого объекта не определен конструктор без параметров

Ответы [ 2 ]

0 голосов
/ 27 февраля 2012

Вы не передаете какую-либо модель представлению в своем действии.Также не следует использовать то же свойство, что и первый и второй аргумент хелпера DropDownListFor.Первый аргумент, который вы передаете как лямбда-выражение, соответствует скалярному свойству в вашей модели представления, которое будет содержать выбранное значение и которое позволит вам получить это значение обратно при отправке формы.Второй аргумент - это коллекция.

Так что вы можете немного адаптировать свой код:

Модель:

public class Hobbies
{
    [Required]
    public string SelectedHobbyId { get; set; }
    public IEnumerable<SelectListItem> AvailableHobbies { get; set; }

    ... some other properties that are irrelevant to the question 
}

Контроллер:

public class HomeController: Controller
{
    public ActionResult Create()
    {
        // obviously those values might come from a database or something
        var values = new[]
        { 
            new { Value = "1", Text = "Dancing" },
            new { Value = "2", Text = "Painting" }, 
            new { Value = "3", Text = "Singing" },
        };

        var model = new Hobbies
        {
           AvailableHobbies = values.Select(x => new SelectListItem
           {
               Value = x.Value,
               Text = x.Text
           });
        }; 
        return View(model);
    }     

    [HttpPost]
    public ActionResult Create(Hobbies hobbies)
    {
        // hobbies.SelectedHobbyId will contain the id of the element
        // that was selected in the dropdown
        ...
    }
}

Вид:

@model Hobbies
@using (Html.BeginForm())
{
    @Html.LabelFor(x => x.SelectedHobbyId)
    @Html.DropDownListFor(x => x.SelectedHobbyId, Model.AvailableHobbies) 
    @Html.ValidationMessageFor(x => x.SelectedHobbyId)

    <button type="submit">Create</button>
}
0 голосов
/ 27 февраля 2012

Я бы создал их как

Модель:

public class ViewModel
{
    public int Id { get; set; }
    public string HobbyName { get; set; }
    public IEnumerable<SelectListItem> Hobbies {get;set; }
    public string FileLocation { get; set; }
    public string HobbyDetail { get; set; }
}

Действие

public ActionResult Create()
{
    var someDbObjects= new[]
    { 
        new { Id = "1", Text = "Dancing" },
        new { Id = "2", Text = "Painting" }, 
        new { Id  = "3", Text = "Singing" },
    };
    var model = new ViewModel
    {
       Hobbies = someDbObjects.Select(k => new SelectListItem{ Text = k, Value = k.Id })
    }; 

    return View(model);
} 

View

<div class="editor-label">
    @Html.LabelFor(model => model.HobbyName)
</div>
<div class="editor-field">
    @Html.DropDownListFor(x => x.HobbyName, Model.Hobbies ) 
    @Html.ValidationMessageFor(model => model.HobbyName)
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...