2017-12-09 24 views
0

こんにちは、私は学校プロジェクトのためにMicrosoft asp.net MVC Core 2.0を使用して簡単なブログを行い、記事のCRUD操作を実装する際に問題が発生しました。より正確には、私は記事の編集方法にのみ問題があります。 はここに私のコントローラメソッド ASP.net Core MVC 2.0 FormEditModelをビューからコントローラに渡す

[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)); 
     } 

されており、ここで私のサービスである "EditAsync" 方法:

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; 
     } 

ビュー:

@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") 
} 

それはIdで正しいの記事を見つけていますテキストを編集できる2つの入力フィールドがありますが、投稿ボタンをクリックすると、記事に適用される変更はありません。私はデバッグを試み、ビューがコントローラーポストメソッドにヌルモデルを送信することを発見しました。私は何がコードに間違っているかを見つけることができないので、私は経験豊富な開発者に入力を求めるべきであると考えました。

答えて

0

Iデバッグを試み、ビューが コントローラPOSTメソッドにヌルモデルを送信することを見出しました。

ビューは正しいリクエストを送信しますが、サーバー側のモデルバインド中にエラーが発生すると思います。この問題を解決するには

、あなたはコントローラのアクションにArticleEditServiceModelパラメータの[FromBody]属性を追加する必要があります

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

FromBody属性は、actionパラメータは、ベースのメディアタイプフォーマッタに要求本体から非直列化する必要があるASP.NETコアフレームワークに指示on Content-Type httpヘッダーにあります。詳細についてはthis articleをチェックし、ASP.NET MVCとASP.NET Core MVC間のモデルバインディングの違いについて説明します。

0

モデルをEditArticleに直接送信するフォームcuzから[email protected]を取り出す必要があります。 1つの入力タイプを作成する= "hidden" asp-for = "Id" class = "form-control"そして動作します。