Je suis la construction de ce point de vue où l'utilisateur peut modifier l'article multiples et enregistrer un à l'époque avec le bouton « Update ».HttpPost sauver Non changements
Problème: J'ai du mal à faire le travail de bouton 'Update'. Voici la méthode post:
[HttpPost, ActionName("Test")]
public async Task<IActionResult> TestPost(int id)
{
var machinetoUpdate = await _context.Machines
.SingleOrDefaultAsync(s => s.Id == id);
if (await TryUpdateModelAsync(
machinetoUpdate,
"",
s => s.MchName, s => s.StoreID, s => s.PUnit, s => s.Status))
{
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateException)
{
ModelState.AddModelError("", "Unable to save changes. " +
"Try again, and if the problem persists, " +
"see your system administrator.");
}
return RedirectToAction("Test");
}
return View(await _context.Machines.AsNoTracking().ToListAsync());
}
Mise à jour: Fondamentalement, ce code ne fonctionne pas. Je suis un tutoriel et j'essaie de l'adapter à ce dont j'ai besoin, mais ce n'est pas simple d'enregistrer les modifications apportées à n'importe quelle ligne.
Il ne jetez pas tho d'erreur.
C'est le code de la vue:
@model IEnumerable<Application.Models.Machine>
@{
ViewData["Title"] = "Test";
}
<h2>Management</h2>
<hr />
<table class="table" asp-action="Test">
<thead>
<tr>
<th>Serial</th>
<th>Tienda</th>
<th>Precio por Jugada</th>
<th>Estado</th>
<th>Update</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
<div class="form-group">
<div class="col-md-10">
<input asp-for="@item.MchName" readonly class="form-control" />
<span asp-validation-for="@item.MchName" class="text-danger"></span>
</div>
</div>
</td>
<td>
<div class="form-group">
<div class="col-md-10">
<select asp-for="@item.StoreID" class="form-control" asp-items="ViewBag.StoreID">
<option value="">-- Seleccione Tienda --</option>
</select>
<span asp-validation-for="@item.StoreID" class="text-danger"></span>
</div>
</div>
</td>
<td>
<div class="form-group">
<div class="col-md-10">
<input type="number" max="10" step=".1" asp-for="@item.PUnit" class="form-control" />
<span asp-validation-for="@item.PUnit" class="text-danger"></span>
</div>
</div>
</td>
<td>
<div class="form-group">
<div class="col-md-10">
<select name="Status" asp-for="@item.Status" class="form-control">
<option value="0">Operativo</option>
<option value="1">Nuevo Item</option>
<option value="2">Reparación</option>
</select>
<span asp-validation-for="@item.Status" class="text-danger"></span>
</div>
</div>
</td>
<td>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<input type="hidden" value="@item.Id" name="Id" />
<input type="submit" value="Update" />
}
</td>
</tr>
}
</tbody>
Toute aide et ce que je pourrais faire mal dans la méthode Post est la bienvenue. Merci à l'avance
Bonjour, Merci pour l'entrée. J'ai essayé et l'erreur est-ce (mentionné dans le post): InvalidOperationException: L'élément de modèle dans le passé ViewDataDictionary est de type « Application.Models.Machine », mais cette instance ViewDataDictionary a besoin d'un élément de modèle de type « Système. Collections.Generic.IEnumerable'1 [Application.Models.Machine] '. –