AKTUALISIERT: Die Idee ist einfach: Ich möchte ein Eingabefeld mit einem Standardwert für ImageTitle Feld meines Modells auffüllen. Der Wert kommt aus der Datenbank. Dieser Standardwert sollte der Dateiname sein (auch in db gespeichert). Der Benutzer hat die Möglichkeit, das Dokument so zu lassen, wie es ist, oder es zu ändern, bevor die Seite gesendet wird.ASP.NET MVC 5 Zuweisung von Eingabewert mit Javascript Ursache DbEntityValidationException
Ich habe eine Ansicht, die ein Formular mit HTML-Helfern wie @EditorFor
rendert. Sobald die Seite geladen ist ($(document).ready()
) habe ich versucht, JQuery zu verwenden, um den Wert eines editierbaren input
mit der ID label-title
zu setzen, aber es stellte sich heraus, dass, als ich die Seite posten ich eine Ausnahme bekam. Diese Ausnahme ist nicht vorhanden, wenn ich manuell einen Bildtitel in die Eingabe gebe.
Ich habe versucht, ImageTitle einen Wert in der GET-Bearbeitungsaktionsmethode zuzuweisen. myImage.ImageTitle = myImage.Filename
Wie bei JQuery wird die Eingabe ordnungsgemäß mit einem Wert ausgefüllt, aber beim POST der Seite tritt dieselbe Ausnahme auf. An exception of type 'System.InvalidOperationException' occurred in System.Web.Mvc.dll but was not handled in user code Additional information: There is no ViewData item of type 'IEnumerable' that has the key 'UseType'. Exception thrown: 'System.Data.Entity.Validation.DbEntityValidationException' in EntityFramework.dll Exception thrown: 'System.InvalidOperationException' in System.Web.Mvc.dll
Diese Ausnahme scheint nichts mit meinem wirklichen Problem zu tun zu haben, da ich es nicht verstehe, wenn ich die einzelne Zeile myImage.ImageTitle = myImage.Filename
lösche und die App-Funktion einwandfrei funktioniere.
Hier ist ein Code, den ich verwende.
@Html.EditorFor(model => model.ImageTitle, new { htmlAttributes = new { id = "label-title", @class = "form-control" } })
erzeugt dieser HTML
<input class="form-control text-box single-line valid" id="label-title" name="ImageTitle" value="benq160715074510.jpg" type="text"></input>
Ich bekomme keinen Fehler, wenn ich manuell einen Wert für Bildtitel eingeben, aber alles habe ich versucht, entweder mit JQuery, Javascript oder einem Wert im Controller-Aktion zuweisen triggert eine Ausnahme.
Meine bearbeiten Methode ist ziemlich Standard
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "All my fields here including ImageTitle..")] TutoringImage tutoringImage)
{
if (ModelState.IsValid)
{
Db.Entry(Image).State = EntityState.Modified;
Db.SaveChanges();
return RedirectToAction("Index");
}
return View(Image);
}
Kann mir jemand helfen, dass man auf?
Warum verwenden Sie Javascript? Legen Sie einfach den Wert von ImageTitle in der GET-Methode fest, bevor Sie das Modell an die Ansicht senden (d. H.e wie "@ ViewBag.currentFileName" und lösche den "ViewBag". Und das Erstellen ungültiger HTML. –
Ich stimme @stephenmuecke zu. Sie benötigen dazu kein Javascript. Sie machen es schwieriger für Sie –
Das ist eine gute Idee, nur versucht es, es scheint die gleiche Ausnahme auszulösen. Warum den Viewbag löschen? –