我有以下问题:
我在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这样的单独模型。
感谢任何帮助。
答案 0 :(得分:1)
您无法从通常的&lt; SELECT&gt;返回对象标签由Html.DropDownList()方法呈现,但只能返回字符串变量。在您的情况下,EducationLevels对象的ID将被发送到服务器。您应该定义并使用另一个自定义帮助程序方法按ID重建此对象。