次の問題があります。MVC:DropdownListForエラー "ラムダ式がデリゲート型ではないため 'string'型に変換できません"
私はUsers
と呼ばれるテーブルを持っていて、別のテーブルDepartment
があります。
ユーザーフォームのユーザーとして自分自身を作成しようとしたときに、ユーザーがDepartmentフィールドに表示されると、Departmentテーブルから利用可能なすべてのDepartmentタイトルがドロップダウンリストに表示されます。その理由:部門テーブルは他の操作に使用されるため、Userdataとリンクしてはいけません。したがって、Userdataにはテーブルの部門名だけが含まれていれば十分です。
私のコントローラは次のようになります。
私のHTMLセクションで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);
}
:
<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; }
}
しかし、私はできません私はエラーが発生するので、コンパイルしてください:
なぜこれは機能しませんか?どうすれば修正できますか?
私はすでにこのSolutionProposalを見ましたが、モデル、LinqとData.Entityが既に参照されているため、これは役に立たなかった。
'@ Html.DropDownListFor()'ではない '@ Html.DropDownList()' –
@StephenMueckeのおかげで、その後私は、次のエラーメッセージが表示されます。 エラーCS1928 \tは 'HtmlHelperの'「DropDownListForの定義が含まれていません。 'と最適な拡張メソッドオーバーロード' SelectExtensions.DropDownListFor (HtmlHelper 、式>、IEnumerable 、オブジェクト) 'が無効な引数を持っています –
Azeristar
不思議なことは何でもできます。あなたが縛っているモデルは何ですか? (あなたが示したのは 'class department'ですが、' department'という名前のプロパティは含まれていません) –