2017-02-07 1 views
0

저는 MVC를 처음 사용하고 있으며 뷰 모델을 예상하는 컨트롤러에 양식을 제출할 때 기본 바인딩이 실패하는 문제를 해결하기 위해 노력하고 있습니다. 나는 모델 바인딩 속성 [FromForm]을 생성자에 성공없이 추가하려고 시도했다. 그리고 나는이 경우에 과도한 느낌을받는 사용자 정의 바인더에 대해 읽었 다. 전체 HTML을 게시해야한다면 할 수 있습니다.ASP.Net Core Exception - 모델 객체 용 모델 바인더를 만들 수 없습니다.

정말 도움이 될만한 정보를 제공해 주시면 감사하겠습니다. 나는 심지어 디버그하고 중단 점을 때려 고투하고있다.

InvalidOperationException : 'XX.Models.ClientEditViewModel'유형의 모델 개체에 대한 모델 바인더를 만들 수 없습니다.

모델

public partial class ClientEditViewModel 
{ 
    public ClientEditViewModel(List<ProgramViewModel> programs) 
    { 
    this.Programs = programs; 
    } 
    public int ClientId { get; set; } 
    public string ClientName { get; set; } 
    public List<ProgramViewModel> Programs { get; set; } 
} 

FORM

@model XX.Models.ClientEditViewModel 
<form asp-action="EditClient" method="post"> 
     <div class="form-horizontal"> 
     <input type="hidden" asp-for="@Model.ClientId" /> 
     <div class="form-group"> 
      <label asp-for="@Model.ClientName" class="col-md-2 control-label"></label> 
      <div class="col-md-10"> 
       <input asp-for="@Model.ClientName" class="form-control" /> 
       <span asp-validation-for="@Model.ClientName" class="text-danger" /> 
      </div> 
     </div> 
     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Update" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
</form> 

바인딩의 기본은, 매개 변수없는 생성자를 사용

[HttpPost] 
[ValidateAntiForgeryToken] 
public async Task<IActionResult> EditClient(ClientEditViewModel clientedit) 
{ 
if (ModelState.IsValid) 
{ 
    Client client = await dbcontext.Client.SingleOrDefaultAsync(m => m.Id == clientedit.ClientId); 
    try 
    { 
     client.Name = clientedit.ClientName; 
     dbcontext.Client.Update(client); 
     await dbcontext.SaveChangesAsync(); 
    } 
    catch (Exception ex) 
    { 
     string error = ex.InnerException.ToString(); 
     if (!ClientExists(clientedit.ClientId)) 
     { 
      return NotFound(); 
     } 
     else 
     { 
      throw; 
     } 
    } 

    TempData["msg"] = "You have successfully edited " + clientedit.ClientName + "."; 
    return RedirectToAction("Index"); 
} 

return null; 
} 

답변

2

컨트롤러 모델은 사용자 정의를 필요로 사용자 정의 생성자를 가지고있는 동안 제본. 여기에 비슷한 게시물이 있습니다 Posting data when my view model has a constructor does not work

귀하의 경우에는 프로그램에 세터가 있으므로 맞춤 생성자를 완전히 제거합니다.

+1

질문이 중복되어 대답이 중복 됨 –

+0

생성자가 문제였습니다. 답변을 해주셔서 감사드립니다. 제 질문은 복제본으로 판명되었지만 그 용어로 검색하지 않았기 때문입니다. 귀하의 답변은 매우 도움이되었으므로 투표를 통해 투표를 완료했습니다. – K7Buoy

+0

감사합니다. 제가 도울 수있어서 기쁩니다. 이것은 제가 제공 한 첫 번째 답변이었습니다! –

관련 문제