2017-03-13 2 views
1

Ich habe asp-route-ID in einem Fall arbeiten:Warum funktioniert asp-route-id nicht in meinem Formularpost?

Es ist aus einem Anker-Tag wie folgt funktioniert:

<a id="editModal" data-toggle="modal" data-target="#modal_box" 
    class="btn btn-sm btn-primary" 
    asp-action="Edit" asp-route-id="@user.Id">Edit</a> 

und wird wie folgt erhalten:

public async Task<PartialViewResult> DeleteConfirm(string Id) => 
     PartialView("_DeleteConfirm", await _userManager.FindByIdAsync(Id)); 

Diese Methode erhält die richtige ID

Das nächste Beispiel hat die Route-ID in der Form Tag wie folgt:

<div class="modal-footer"> 
    <form asp-controller="Account" asp-action="Delete" asp-route-id="@Model.Id" method="post"> 
     <button type="submit" class="btn btn-primary" 
      asp-action="Delete">Yes - Delete this User</button> 
     <a asp-action="Index" class="btn btn-default">Cancel</a> 
    </form> 
</div> 

und ich versuche, die Id hier zu erhalten:

[HttpPost] 
    public async Task<IActionResult> Delete(string Id) 
    { 
     AppUser user = await _userManager.FindByIdAsync(Id); 
     if (user != null) 
     { 
      IdentityResult result = await _userManager.DeleteAsync(user); 
      if (result.Succeeded) 
      { 
       return RedirectToAction("Index"); 
      } 
      else 
      { 
       AddErrorsFromResult(result); 
      } 
     } 
     else 
     { 
      ModelState.AddModelError("", "User Not Found"); 
     } 
     return View("Index", _userManager.Users); 
    } 

Aber in diesem Fall ist der Parameter kommt in Null.

Es sollte vom from-Tag funktionieren. Ich habe das aus dem ersten Identity Chapter in Adam Freemans APress MVC Core Book bekommen und es funktionierte, als ich es für dieses Beispiel eintippte.

+0

Haben Sie das Formular überprüfen, die in der generiert wurde HTML? Entweder ist die Aktions-URL dort falsch oder die Modellbindung funktioniert nicht. Normalerweise würde der Parameter "id" anstatt "Id" heißen. – juunas

+0

guten Ruf auf Namenskonvention. Vielen Dank. Versuche immer noch zu reparieren. – Sam

Antwort

1

Ich habe das Form-Tag als Antwort auf junas Kommentare inspiziert.

Es sah wie folgt aus:

<form method="post" action="/Account/Delete/5066a97b-7eb4-4e1d-889b-3f3450adc1d6"> 
     <button type="submit" class="btn btn-primary" formaction="/Account/Delete">Yes - Delete this User</button> 
     <a class="btn btn-default" href="/Account">Cancel</a> 
    <input name="__RequestVerificationToken" type="hidden" value="CfDJ8At6yzynfgJHstUkF5jJTYgHHX0on9ajBa9NfD60YGbM7aRhKjDQUGkh4gPAMkwwOsnqUtDxSx87MnUvbxcefB7tGX1v0Xi38h_SoL_iakiFdJSpUbymp4tsr-cMFNK3kwYx7o42OumLkFbvFn1Nyun_8LDc0mmOvGN5LeeHiIq84cSJCaaiyR_2talw6Dpcvw" /></form> 

Beachten Sie die zusätzliche formaction = „/ Konto/löschen“> rechts auf die Schaltfläche neben der Form Aktion.

Ich hatte eine extra asp-route-ID übrig auf einem Knopf, den ich von einem Anker gewechselt hatte.

Ich hatte es den Knopf hier ausziehen:

<form asp-controller="Account" asp-action="Delete" asp-route-id="@Model.Id" method="post"> 
     <button asp-route-id="@Model.Id" type="submit" class="btn btn-primary">Yes - Delete this User</button> 
     <a asp-action="Index" class="btn btn-default">Cancel</a> 
    </form> 

und auf die Schaltfläche wie folgt machen:

Ja - löschen Benutzer

Verwandte Themen