So habe ich eine To-Do-Liste Anwendung, die ich entwickeln (Ich bin ein komplettes noob bei MVC). Ich mache mit der CRUD-Implementierung weiter und habe gerade die Delete- und DeleteConfirmed-Methode geschrieben. Ich bin nicht einmal ganz sicher, wie ich es herausgefunden habe. Etwas verbunden und ich habe es versucht und es hat funktioniert, aber ein Aspekt ist verrückt.Meine Lösung funktioniert, ich verstehe nur nicht ganz, warum: To-Do-Liste Anwendung MVC5
Also habe ich eine Liste von Elementen mit den "Bearbeiten, Details und Löschen" Aktionslinks neben jedem Element (Ansicht wurde generiert). Also beschloss ich, mit dem Löschen zu beginnen. Ich machte die Löschaktion, die ziemlich geradlinig ist. Übergeben Sie eine int-ID aus dem vom Benutzer ausgefüllten Formular, überprüfen Sie, ob es null ist, erstellen Sie das Tabellenklassenobjekt und überprüfen Sie dann, ob die db-Tabelle bei diesem Schlüssel null ist und geben Sie dann die Ansicht mit dem übergebenen tbl-Objekt Delete zurück .cshtml Ansicht des Objekts mit der Schaltfläche "Löschen" darunter. Die nächste Aktion, die ich geschrieben habe, ist die DeleteConfirmed(), die tatsächlich löscht und speichert Änderungen an der Datenbank (wenn ich das richtig verstehe?). Wie verknüpft dieser Button die DeleteConfirm() Aktion? Ich kann einfach nicht sehen, die Punkte zu verbinden, und ich möchte nicht weitermachen, bis ich es verstehe.
als Referenz, Controller-Methoden:
public ActionResult Delete(int? id)
{
using (MyBasicListAppEntities db = new MyBasicListAppEntities())
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
tblBasicList tbl = new tblBasicList();
if(tbl == null)
{
return HttpNotFound();
}
return View(tbl);
}
}
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
using (MyBasicListAppEntities db = new MyBasicListAppEntities())
{
// Find the row based on id from form (primary key)
tblBasicList tbl = db.tblBasicLists.Find(id);
// remove the whole row at that id
db.tblBasicLists.Remove(tbl);
db.SaveChanges();
}
return RedirectToAction("MyToDoList", "Home");
}
Delete.cshtml:
@model MyBasicListApp2.Models.DB.tblBasicList
@{
ViewBag.Title = "Delete";
}
<h2>Delete</h2>
<h3>Are you sure you want to delete this?</h3>
<div>
<h4>tblBasicList</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.InputDate)
</dt>
<dd>
@Html.DisplayFor(model => model.InputDate)
</dd>
<dt>
@Html.DisplayNameFor(model => model.InputItem)
</dt>
<dd>
@Html.DisplayFor(model => model.InputItem)
</dd>
<dt>
@Html.DisplayNameFor(model => model.InputImportance)
</dt>
<dd>
@Html.DisplayFor(model => model.InputImportance)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ItemCompletion)
</dt>
<dd>
@Html.DisplayFor(model => model.ItemCompletion)
</dd>
</dl>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
<div class="form-actions no-color">
<input type="submit" value="Delete" class="btn btn-default" /> |
@Html.ActionLink("Back to List", "Index")
</div>
}
</div>
Hauptseite mit der Liste: MyToDoList.cshtml:
@model IEnumerable<MyBasicListApp2.Models.DB.tblBasicList>
@{
ViewBag.Title = "MyToDoList";
}
<h2>MyToDoList</h2>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.InputDate)
</th>
<th>
@Html.DisplayNameFor(model => model.InputItem)
</th>
<th>
@Html.DisplayNameFor(model => model.InputImportance)
</th>
<th>
@Html.DisplayNameFor(model => model.ItemCompletion)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.InputDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.InputItem)
</td>
<td>
@Html.DisplayFor(modelItem => item.InputImportance)
</td>
<td>
@Html.DisplayFor(modelItem => item.ItemCompletion)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.BasicListID }) |
@Html.ActionLink("Details", "Details", new { id=item.BasicListID }) |
@Html.ActionLink("Delete", "Delete", "List", new { id=item.BasicListID }, null)
</td>
</tr>
}
</table>
<h4>Would you like to add another item?</h4>
@Html.ActionLink("Add more", "ToDoList", "List")
die auch InputItem nur Shows als leeres Feld in der Delete.cshtml-Ansicht. Die anderen Anzeigen zeigen ihre Werte, aber nicht inputItem (weniger wichtig für mich, um es jetzt herauszufinden).
Mann danke! Das hat mich verrückt gemacht. Irgendeine Idee warum das Input Item nicht in der View angezeigt wird? Ich habe debugged und der Wert ist da, und es wird aus der Tabelle entfernt. Es zeigt nur nicht in der Ansicht – Devon
Nun, der Code, den Sie in Ihrer Aktion Löschen nur veröffentlicht, erstellt ein neues Objekt und sendet es an die Ansicht. Wenn der Standardwert für InputItem leer ist, wird dort nichts vorhanden sein.Wenn Sie die aktuellen Werte für alles, was mit dieser ID verknüpft ist, möchten, müssen Sie sie vor dem Rendern der Ansicht aus der DB abrufen. – Paul
beiseite, ich bin ein großer Fan der Bücher von Agress MVC, für den Anfang: http://www.amazon.com/Pro-ASP-NET-Experts-Voice-ASP-Net/dp/1430265299/ref = sr_1_1? dh = UTF8 & qid = 1463099723 & sr = 8-1 & keywords = apress + asp.net + mvc – Paul