2017-12-09 3 views
0

Hallo, ich mache einen einfachen Blog mit Microsoft asp.net MVC Core 2.0 für ein Schulprojekt und habe ein Problem bei der Implementierung von CRUD-Operationen für Artikel aufgetreten. Genauer gesagt habe ich ein Problem nur mit der Methode Artikel bearbeiten. Hier ist mein Controller-Methode ASP.net Core MVC 2.0 Weitergabe von FormEditModel aus Sicht auf Controller

[HttpPost] 
[ValidateModelState] 
    public async Task<IActionResult> EditArticle(ArticleEditServiceModel parameter) 
     { 
      parameter.Title = this.html.Sanitize(parameter.Title); 
      parameter.Content = this.html.Sanitize(parameter.Content); 

      //var user = this.userManager.GetUserName(User.Identity.Name) 

      await this.articles.EditAsync(parameter.Id, parameter.Title, parameter.Content); 

      return RedirectToAction(nameof(Index)); 
     } 

Und hier ist mein Service "EditAsync" Methode:

public async Task<bool> EditAsync(int id, string title, string content) 
     { 
      var article = await this.db.Articles.Where(a => a.Id == id).FirstOrDefaultAsync(); 

      if (article == null) 
      { 
       return false; 
      } 

      article.Title = title; 
      article.Content = content; 

      await this.db.SaveChangesAsync(); 
      return true; 
     } 

The View:

@model ArticleEditServiceModel 

@{ 
    ViewData["Title"] = "Edit Article"; 
} 

<h2>@ViewData["Title"]</h2> 


<div class="row"> 
    <div class="col-md-4"> 
     <form asp-controller="Article" asp-action="EditArticle" [email protected] method="post"> 
      <div class="form-group"> 
       <label asp-for="Title"></label> 
       <input asp-for="Title" class="form-control" /> 
       <span asp-validation-for="Title" class="form-text text-danger"></span> 
      </div> 

      <div class="form-group"> 
       <label asp-for="Content"></label> 
       <input asp-for="Content" required class="form-control" /> 
       <span asp-validation-for="Content" class="form-text text-danger"></span> 
      </div> 
      <a asp-controller="Article" asp-action="Index" class="btn btn-default">Back</a> 
      <button type="submit" formmethod="post" class="btn btn-success">Edit Article</button> 
     </form> 
    </div> 
</div> 

@section Scripts { 
    @await Html.PartialAsync("_ValidationScriptsPartial") 
} 

Es findet den richtigen Artikel von Id und gibt Ich habe die zwei Eingabefelder, wo ich den Text bearbeiten kann, aber wenn ich auf die Schaltfläche "Senden" klicke, werden keine Änderungen am Artikel vorgenommen. Ich habe versucht, zu debuggen und herausgefunden, dass die Ansicht ein Null-Modell an die Controller-Post-Methode senden. Ich kann nicht finden, was mit dem Code falsch ist, also dachte ich, dass ich erfahrenere Entwickler für Eingang bitten sollte.

Antwort

0

ich versuchte, Debugging und fand heraus, dass die Sicht auf die Controller POST-Methode ein Nullmodell senden.

Ich glaube, dass die Ansicht korrekte Anfrage sendet, aber Fehler während der Bindung des Modells auf der Serverseite passiert.

public async Task<IActionResult> EditArticle([FromBody] ArticleEditServiceModel parameter) 

FromBody Attribut weist ASP.NET Core-Framework, das Aktionsparameter von der Anfrage Körper mit Medientyp-Formatierungs deserialisiert werden sollte basiert:

Um das Problem zu beheben, sollten Sie Attribut für ArticleEditServiceModel Parameter in Aktion Controller hinzufügen [FromBody] auf Content-Type HTTP-Header. Überprüfen Sie this article für Details, es erläutert den Unterschied in der Modellbindung zwischen ASP.NET MVC und ASP.NET Core MVC.

0

sollten Sie [email protected] aus dem Formular herausnehmen, da Sie das Modell direkt an EditArticle senden. Erstellen Sie einen Eingabe-Typ = "versteckte" asp-for = "Id" class = "form-control" Und wird funktionieren.

Verwandte Themen