2017-05-26 1 views
0

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

Update Multiple Items

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

Répondre

0

essayer

return View(machinetoUpdate) 
+0

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] '. –