Ich habe das folgende Problem.MVC: DropDownListFor Fehler "kann Lambda-Ausdruck nicht in Typ 'String' konvertieren, weil es kein Delegate-Typ ist"
Ich habe eine Tabelle, die Users
genannt wird, und ich habe eine andere Tabelle namens Department
.
Jetzt möchte ich, dass in der Benutzeroberfläche, wenn ein Benutzer sich selbst als Benutzer mit dem Benutzerformular erstellen wird, dass er auf dem Abteilungsfeld eine Dropdown-Liste alle Abteilung Titel, die aus Abteilung Tabelle verfügbar sind. Grund dafür: Die Abteilungstabelle wird für andere Operationen verwendet und sollte nicht mit den Benutzerdaten verknüpft werden. Daher sollten die Benutzerdaten nur den Abteilungsnamen aus der Tabelle enthalten, und das ist genug.
My-Controller wie folgt aussieht:
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);
}
Das ist mein HTML-Abschnitt ist:
<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>
Und schließlich meine Abteilung Klasse aus der Tabelle:
[Table("department")]
public partial class department
{
[Key]
public int departmentid { get; set; }
[Required]
public string department_title { get; set; }
public string subdepartment { get; set; }
}
Aber ich kann nicht kompilieren, weil ich den Fehler bekomme:
Error CS1660 Cannot convert lambda expression to type 'string' because it is not a delegate type BTKPI
Warum funktioniert das nicht? Wie kann ich das beheben?
Ich habe mir schon diese SolutionProposal angesehen, aber das hat nicht geholfen, weil das Modell, Linq und Data.Entity bereits referenziert ist.
'@ Html.DropDownListFor()' nicht '@ Html.DropDownList()' –
@StephenMuecke danke, aber dann bekomme ich folgende Fehlermeldung: Fehler CS1928 \t 'Htmlhelper' enthält keine Definition für ‚DropDownListFor 'und die beste Erweiterung Methode Überladung' SelectExtensions.DropDownListFor (HtmlHelper , Ausdruck >, IEnumerable , Objekt) 'hat einige ungültige Argumente –
Azeristar
Sie haben so viel schlechten Code ist ein Wunder, dass alles funktioniert. An welches Modell binden Sie sich? (Alles, was Sie gezeigt haben, ist 'class department', aber das enthält keine Eigenschaft mit dem Namen' department') –