2017-12-09 6 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로 정확한 기사를 찾아 준다 나에게 텍스트를 편집 할 수있는 두 개의 입력 필드가 있지만 제출 버튼을 클릭하면 기사에 적용된 변경 사항이 없습니다. 나는 디버깅을 시도하고 뷰가 컨트롤러 모델 포스트에 널 모델을 보낸다는 것을 알았다. 코드에 무엇이 잘못되었는지를 알 수 없어서 경험 많은 개발자에게 입력을 요청해야한다고 생각했습니다.

답변

0

나는 디버깅을 시도하고 뷰가 컨트롤러 포스트 방법에 널 모델을 보낼 것을 알아 냈다.

보기가 올바른 요청을 보내지 만 서버 측 모델 바인딩 중에 오류가 발생한다고 생각합니다.

이 문제를 해결하려면, 당신은 추가해야 [FromBody] 속성을 ArticleEditServiceModel 매개 변수에 대한 컨트롤러 액션에서 :

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

FromBody 속성이 작용 매개 변수는 미디어 유형 포맷으로 요청 본문에서 직렬화를 기반으로해야 ASP.NET 코어 프레임 워크를 지시 Content-Type http 헤더에 있습니다. 자세한 내용은 this article을 확인하십시오. ASP.NET MVC와 ASP.NET Core MVC 간의 모델 바인딩 차이점에 대해 설명합니다.

0

당신은 [email protected] 양식에서 직접 가져와야합니다. 모델을 EditArticle에 직접 보냅니다. 하나의 입력 유형 만들기 = "숨김"asp-for = "Id"class = "form-control"그러면 작동합니다.