我有以下問題。MVC:DropdownListFor錯誤「無法將lambda表達式轉換爲類型'string',因爲它不是委託類型」
我有一個表叫做Users
,我有另一個表叫Department
。
現在我想要的是,在用戶界面中,當用戶使用用戶表單創建自己時,他在部門字段中顯示下拉列表,可以從部門表中獲取所有部門標題。原因:部門表將用於其他操作,不應與用戶數據鏈接。所以用戶數據只能包含表格中的部門名稱,這就夠了。
我的控制器看起來是這樣的:
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; }
}
但我不能編譯,因爲我得到錯誤:
Error CS1660 Cannot convert lambda expression to type 'string' because it is not a delegate type BTKPI
爲什麼這不起作用?我該如何解決這個問題?
我已經看過這個SolutionProposal,但這沒有幫助,因爲模型Linq和Data.Entity已經被引用。
'@ Html.DropDownListFor()''不@ Html.DropDownList()' –
@StephenMuecke感謝,但後來我得到了以下錯誤消息: 錯誤CS1928 \t '的HtmlHelper' 不包含「DropDownListFor的定義'和最好的擴展方法重載'SelectExtensions.DropDownListFor (HtmlHelper ,Expression >,IEnumerable ,object)'有一些無效的參數 –
Azeristar
你有這麼多不好的代碼一個奇蹟什麼都有效。你綁定的模型是什麼? (你所顯示的只是'class department',但不包含名爲'department'的屬性) –