Ich bin ein semi-kompetenter Winforms/WPF/MVVM/C#/vb.Net-Entwickler, versucht, ASP.Net mit MVC zu unterrichten und ich bin ein wenig verwirrt Wie Sie "Ereignisse auslösen" (ich weiß, MVC macht keine Ereignisse, aber das ist es, womit ich es gleichstelle) von allem, was nicht der Submit-Button eines Formulars ist. Ich habe eine View, Controller und ein Model für eine einfache To-Do-Liste Stil-Anwendung und ich frage mich, wie ich etwas Code in der Steuerung aus dem Wechsel des Kontrollkästchens auslösen kann. Dies ist mein Code:Auslösen einer ActionResult-Methode aus einem Kontrollkästchen umschalten
Ansicht (Views/ToDo/Index.cshtml):
@{
ViewBag.Title = "Index";
}
@model List<ToDo.Models.ToDoListItem>
<h2>To Do List</h2>
<form action="/ToDo/Create" method="post">
<div>
<input name="ToDoItem" />
<input type="submit" value="Add Task" />
</div>
</form>
<div>
<ul>
@if (Model != null)
{
foreach (var item in Model)
{
<li>
<form action="/ToDo/Delete/@item.ItemId " method="post">
<input type="checkbox" checked="@item.isChecked" />
@if (item.isCompleted)
{
<label style="text-decoration-line:line-through">@item.ItemText</label>
}
else
{
<label>@item.ItemText</label>
}
<input type="submit" value="Delete" />
</form>
</li>
}
}
</ul>
</div>
Controller (Controller/ToDoController.cs):
namespace ToDo.Controllers
{
public class ToDoController : Controller
{
// GET: ToDo
public ActionResult Index()
{
return View(Models.ToDoListItem.GetAll());
}
[HttpPost]
public ActionResult Create(string toDoItem)
{
Models.ToDoListItem.Create(toDoItem, Models.ToDoListItem.GetNextID());
return RedirectToAction("Index");
}
[HttpPost]
public ActionResult Delete(string id)
{
int itemIdentifier = Convert.ToInt32(id);
Models.ToDoListItem.Delete(itemIdentifier);
return RedirectToAction("Index");
}
[HttpPost]
public ActionResult CheckBoxToggle(string id)
{
int itemIdentifier = Convert.ToInt32(id);
Models.ToDoListItem.CompleteToggeled(itemIdentifier);
return RedirectToAction("Index");
}
}
}
Modell (Modelle/ToDiListItem.cs): So
namespace ToDo.Models
{
public class ToDoListItem
{
#region Fields
private int _itemId;
private string _itemText;
private bool _isCompleted;
#endregion
#region Events
#endregion
#region Properties
public int ItemId
{
get
{
return _itemId;
}
set
{
_itemId = value;
}
}
public string ItemText
{
get
{
return _itemText;
}
set
{
_itemText = value;
}
}
public bool isCompleted
{
get
{
return _isCompleted;
}
set
{
_isCompleted = value;
}
}
public string isChecked
{
get
{
if (isCompleted)
return "checked";
else
return string.Empty;
}
}
#endregion
#region Public Methods
public static void Create(string toDoItem, int itemId)
{
var item = new ToDoListItem();
item.ItemText = toDoItem;
item.ItemId = itemId;
GlobalVariables.Tasks.Add(item);
}
public static void Delete(int id)
{
foreach (ToDoListItem item in GlobalVariables.Tasks)
{
if (item.ItemId == id)
{
GlobalVariables.Tasks.Remove(item);
break;
}
}
}
public static void CompleteToggeled(int id)
{
foreach (ToDoListItem item in GlobalVariables.Tasks)
{
if (item.ItemId == id)
{
item.isCompleted = !item.isCompleted;
}
}
}
public static List<ToDoListItem> GetAll()
{
return GlobalVariables.Tasks;
}
public static int GetNextID()
{
return ++GlobalVariables.CurrentID;
}
#endregion
}
}
, was ich tue bin auf der Suche nach zu können ist die „geprüft“ Zustand eines der Kästchen auf dem Formular und rufen Sie die „C hin- und herzuschalten heckBoxToggle "Methode in meinem Controller, die ID des Artikels (ähnlich wie ich es tat auf der Schaltfläche Löschen). Ich habe etwas gesehen, das mit Javascript zu tun hat (worüber ich nichts weiß), aber ich habe keine Ahnung, was ich damit mache und nichts, was ich bisher gesehen habe, erklärt es besonders deutlich.
Wenn jemand den besten Weg für mich weiß, etwas zu tun, würde einige Hilfe sehr geschätzt werden.