다음과 같은 문제가 있습니다.MVC : DropdownListFor 오류 "람다식이 대리자 형식이 아니기 때문에 'string'을 입력 할 수 없습니다."
Users
이라는 테이블이 있는데 Department
이라는 테이블이 있습니다.
이제 UI에서 사용자가 사용자 양식을 사용하여 자신을 사용자로 만들 때 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; }
}
하지만 그럴 수 없어 오류가 발생하여 컴파일하십시오.
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 'Html 헬퍼가'DropDownListFor '에 대한 정의를 포함하지 않습니다 '및 최상의 확장 메서드 오버로드'SelectExtensions.DropDownListFor (HtmlHelper , Expression >, IEnumerable , 개체) '에 잘못된 인수가 있습니다. –
Azeristar
코드가 너무 깁니다. 무슨 일이든 궁금해. 당신이 바인딩하는 모델은 무엇입니까? (당신이 보여준 것은'class department'이지만'department'라는 속성은 포함되어 있지 않습니다.) –