Получение данных из Html.DropDownList () в контроллере (ASP MVC) | строка вернулась? - PullRequest
1 голос
/ 24 июня 2009

У меня следующая проблема:

У меня есть форма в site / banen (в настоящее время локально работающий веб-сервер), которая использует базу данных SQL. Ссылка сделана с использованием ADO.net и создается в контроллере следующим образом:

DBModelEntities _entities;
_entities = new DBModelEntities(); // this part is in the constructor of the controller.

Далее я использую эту базу данных для заполнения Html.DropDownList () в моем представлении. Это делается в два этапа. На стороне контроллера мы имеем в конструкторе:

ViewData["EducationLevels"] = this.GetAllEducationLevels();

и вспомогательный метод:

public SelectList GetAllEducationLevels()
{
     List<EducationLevels> lstEducationLevels = _entities.EducationLevels.ToList();
     SelectList slist = new SelectList(lstEducationLevels, "ID", "Name");
     return slist;
}

В представлении у меня есть следующее:

<% using (Html.BeginForm()) {%>

    <fieldset>
        <legend>Fields</legend>

        <!-- various textfields here -->

        <p>
            <label for="EducationLevels">EducationLevels:</label>
            <!-- <%= Html.DropDownList("EducationLevels", ViewData["EducationLevels"] as SelectList)%> -->
            <%= Html.DropDownList("EducationLevels", "..select option..")%>
        </p>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>

<% } %>

Теперь форма отображается правильно, когда я перехожу на страницу создания. Я могу выбрать и т. Д. Но при выборе я должен использовать это значение, чтобы сохранить в моей новой модели для загрузки в базу данных. Вот где это идет не так. У меня есть следующий код для этого в моем контроллере:

//
    // POST: /Banen/Create

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Create(FormCollection form)
    {
        // set rest of information which has to be set automatically
        var vacatureToAdd = new Vacatures();
        //vacatureToAdd.EducationLevels = form["EducationLevels"];

        // Deserialize (Include white list!)
        TryUpdateModel(vacatureToAdd);

        // Validate
        if (String.IsNullOrEmpty(vacatureToAdd.Title))
            ModelState.AddModelError("Title", "Title is required!");
        if (String.IsNullOrEmpty(vacatureToAdd.Content))
            ModelState.AddModelError("Content", "Content is required!");

        // Update the variables not set in the form
        vacatureToAdd.CreatedAt = DateTime.Now;                 // Just created.
        vacatureToAdd.UpdatedAt = DateTime.Now;                 // Just created, so also modified now.
        vacatureToAdd.ViewCount = 0;                            // We have just created it, so no views
        vacatureToAdd.ID = GetGuid();                           // Generate uniqueidentifier

        try
        {
            // TODO: Add insert logic here
            _entities.AddToVacatures(vacatureToAdd);
            _entities.SaveChanges();

            // Return to listing page if succesful
            return RedirectToAction("Index");
        }
        catch (Exception e)
        {
            return View();
        }
    } 
    #endregion

выдает ошибку:

альтернативный текст http://www.bastijn.nl/zooi/error_dropdown.png

Я нашел разные темы на эту тему, но все говорят, что вы можете получить, просто используя:

vacatureToAdd.EducationLevels = form["EducationLevels"];

Хотя это возвращает мне строку. Так как я новичок в ASP.net, я думаю, что забыл сказать, чтобы выбрать объект для возврата, а не строку. Может быть, это selectedValue в той части, где я делаю свой SelectList, но я не могу понять, как правильно установить это. Конечно, я также могу быть в стороне.

Sidenote: в настоящее время я думаю о том, чтобы иметь отдельную модель, такую ​​как здесь .

Любая помощь приветствуется.

1 Ответ

1 голос
/ 24 июня 2009

Невозможно вернуть объект из обычного тега

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...