【发布时间】:2016-07-26 12:04:00
【问题描述】:
我有以下问题。
我有一个名为Users 的表,我还有另一个名为Department 的表。
现在我希望,在 UI 中,当用户要使用用户表单创建自己作为用户时,他会在部门字段中获得一个下拉列表,列出部门表中可用的所有部门标题。原因:部门表将用于其他操作,不应与用户数据链接。所以 Userdata 应该只包含表中的部门名称,这就足够了。
我的控制器如下所示:
public ActionResult UserCreate()
{
ViewBag.AppDataDepartment = new SelectList(database.department, "department_title", "department_title");
return View();
}
[HttpPost]
public ActionResult UserCreate(Users user)
{
if (user.UserID == "" || user.UserID == null)
{
ModelState.AddModelError(string.Empty, "UserID cannot be blank");
}
try
{
if (ModelState.IsValid)
{
List<string> results = database.Database.SqlQuery<String>(string.Format("SELECT UserID FROM USERS WHERE UserID = '{0}'", user.UID)).ToList();
bool _userExistsInTable = (results.Count > 0);
Users _user = null;
if (_userExistsInTable)
{
_user = database.Users.Where(p => p.UserID == user.UserID).FirstOrDefault();
if (_user != null)
{
if(_user.active == true)
{
ModelState.AddModelError(string.Empty, "USER already exists!");
}
else
{
database.Entry(_user).Entity.active = true;
database.Entry(_user).Entity.Last_Modified = System.DateTime.Now;
database.Entry(_user).State = EntityState.Modified;
database.SaveChanges();
return RedirectToAction("Index");
}
}
}
else
{
_user = new Users();
_user.UserID = user.UserID;
_user.lastname = user.lastname;
_user.firstname = user.firstname;
_user.mail = user.mail;
_user.department = user.department;
_user.user_image = user.user_image;
_user.image_path = user.image_path;
if (ModelState.IsValid)
{
_user.active = true;
_user.Last_Modified = System.DateTime.Now;
database.Users.Add(_user);
database.SaveChanges();
ViewBag.AppDataDepartment = new SelectList(database.department, "department_title", "department_title");
return RedirectToAction("Index");
}
}
}
}
catch (Exception ex)
{
//return base.ShowError(ex);
}
return View(user);
}
这是我的 HTML 部分:
<div class="row">
@Html.LabelFor(model => model.UserID, "UserID", new { @class = "col-sm-2 control-label" })
<div class="col-md-4">
@Html.TextBoxFor(model => model.UserID, new { @class = "col-md-4 control-label form-control", @id = "inputEmail3" })
</div>
@Html.LabelFor(model => model.department, "Department", new { @class = "col-sm-2 control-label" })
<div class="col-md-4">
@Html.DropDownList(model => model.department, (SelectList) ViewBag.AppDataDepartment, htmlAttributes: new { @class = "form-control" })
</div>
</div>
最后是我的系类:
[Table("department")]
public partial class department
{
[Key]
public int departmentid { get; set; }
[Required]
public string department_title { get; set; }
public string subdepartment { get; set; }
}
但我无法编译,因为我得到了错误:
错误 CS1660 无法将 lambda 表达式转换为类型“字符串”,因为 它不是一个委托类型 BTKPI
为什么这不起作用?我该如何解决?
我已经看过这个SolutionProposal,但这没有帮助,因为模型、Linq 和 Data.Entity 已经被引用了。
【问题讨论】:
-
@Html.DropDownListFor()不是@Html.DropDownList() -
@StephenMuecke 谢谢,但随后我收到以下错误消息:错误 CS1928 'HtmlHelper
' 不包含 'DropDownListFor' 的定义和最佳扩展方法重载 'SelectExtensions.DropDownListFor (HtmlHelper , Expression >, IEnumerable , object)' 有一些无效参数 -
你有这么多糟糕的代码,难怪能正常工作。你绑定的模型是什么? (您所显示的只是
class department,但不包含名为department的属性) -
@StephenMuecke 哦,好的,现在可以了,我又写了选择列表。我正在尝试其他东西,因此我将其删除。但永远不会少,非常感谢。但是为了在编码方面变得更好(我对这个话题真的很陌生),是什么让我的代码变得糟糕?我怎样才能改进它,以获得好的代码?
-
太多了,无法一一列举。不过明天我会给你一些学习链接。
标签: c# asp.net-mvc entity-framework model-view-controller lambda