从控制器(ASP MVC)中的Html.DropDownList()中检索数据字符串返回?

时间:2009-06-24 09:32:19

标签: asp.net asp.net-mvc

我有以下问题:

我在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

它给出错误:

alt text http://www.bastijn.nl/zooi/error_dropdown.png

我已经找到了各种主题,但是所有人都说你可以通过使用:

来检索
vacatureToAdd.EducationLevels = form["EducationLevels"];

虽然这会为我返回一个字符串。由于我是ASP.net的新手,我想我忘了告诉选择要返回的对象而不是字符串。也许这是我制作SelectList的部分中的selectedValue,但我无法弄清楚如何正确设置它。当然,我也可以在侧面完成。

旁注:目前我正在考虑建立一个像here这样的单独模型。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您无法从通常的&lt; SELECT&gt;返回对象标签由Html.DropDownList()方法呈现,但只能返回字符串变量。在您的情况下,EducationLevels对象的ID将被发送到服务器。您应该定义并使用另一个自定义帮助程序方法按ID重建此对象。