2016-08-26 2 views
0

하나 이상의 하위 모델을 포함하는 모델을 반환하려고합니다. 하위 모델. 첫 번째 레이어는 성공적으로 반환되지만 하위 모델의 세 번째 레이어를 반환하려면 실제로 채워진 변수가없는 해당 모델의 '기본'인스턴스가 생성됩니다. 따라서 반환 된 모델에는 하위 모델이 포함되어 있으며 하위 모델에는 다른 하위 모델이 포함되어 있지만 마지막 하위 모델의 값은 '0'과 'null'로 설정됩니다.Html.BeginCollectionItem 확장을 사용하는 MVC 중첩 EditorTemplate은 항상 값이 '0'또는 'null'로 설정된 객체를 반환합니다.

Html.BeginItemCollection 확장 메서드를 사용하고 있지만 레이어 3에서 올바른 방법으로 사용하고 있는지 확신 할 수 없습니다. 누군가가이 점을보고 나를 도와 주시겠습니까?

메인 모델 페이지 (레이어 1)

@using Website.Models 
@model CreateAgendaBindingModel 
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myForm" })) 
{ 
    <div class="form-horizontal"> 
    for (int i = 1; i < 16; i++) 
    { 
     <div id='[email protected]'> 
       @Html.EditorFor(x => x.VoedingCollection[i], "CreateVoedingTemplate") 
     </div> 
    } 
} 

메인 모델 클래스 (레이어 1)

public class CreateAgendaBindingModel 
{ 
    public int Id { get; set; } 
    public List<CreateVoedingBindingModel> VoedingCollection { get; set; } 
} 

하위 모델 페이지 (레이어 2)

@using HtmlHelpers.BeginCollectionItem; 
@using Website.Models 

@model CreateVoedingBindingModel 

@using (Html.BeginCollectionItem("VoedingCollection")) 
{ 
    <div class="form-group" [email protected]> 
      @Html.EditorFor(x => x.CustomVoeding[0], "CreateCustomVoedingTemplate") 
    </div> 
} 

하위 모델 클래스 (레이어 2) 서브 모델 페이지

public class CreateVoedingBindingModel 
{ 
    public int Id { get; set; } 
    public List<customvoeding> CustomVoeding { get; set; } 
} 

하위 모델 (층 3)

@using HtmlHelpers.BeginCollectionItem; 
@model FoodtrackerModel.customvoeding 

@using (Html.BeginCollectionItem(ViewData.TemplateInfo.HtmlFieldPrefix + ".CustomVoeding")) 
{ 
    <div class="form-group"> 
     @Html.Label("Opmerking (optioneel)", htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.customVoedingOpmerking, new { htmlAttributes = new { @class = "form-control" } })     
     </div> 
    </div> 
} 

서브 모델 클래스의 서브 모델이다 Entity Framework와 통합 된 부분 클래스입니다.

public partial class customvoeding 
{ 
    public static List<customvoeding> GetAllCustomvoeding() 
    { 
     using (foodtrackerEntities1 db = new foodtrackerEntities1()) 
     { 
      db.Configuration.LazyLoadingEnabled = false; 
      return db.customvoeding.ToList(); 
     } 
    } 
} 

그래서 명확히 서브 모델 클래스의 하위 모델 (제 3 층) 층 (1)과 (2). 채워 모든 변수와 반환 레이어 3은 반환되지만 변수는 충전되지 in.

+0

'BeginCollectionItem'은 중첩 된 컬렉션을 지원하지 않습니다. [이 확장 방법] (http://www.joe-stevens.com/2011/06/06/editing-and-binding-nested-lists-with-asp-net-mvc-2/)을 사용하여 볼 수 있습니다. [이 DotNetFiddle] (https://dotnetfiddle.net/wqE6Rb)에 따라 스크립트를 직접 작성하십시오 –

+0

정말 수치 스럽습니다. 이러한 기본 기능에 확장 메서드가 필요한 이유는 무엇입니까? ASP.NET MVC에는 기본적으로이 기능이 없습니다. :/ – DaGrooveNL

+0

무슨 뜻입니까? 이러한 기본 기능에 필요한 확장 방법은 무엇입니까? -'HtmlHelper' ('LabelFor()','EditorFor()'등)는 확장 메소드입니다. –

답변

0

하위 모델의 하위 모델을 사용하지 않아서 문제가 해결되었습니다. 방금 하위 모델 필드의 하위 모델을 이전 레이어의 필드로 하드 ​​코딩했습니다. 따라서 레이어 3 필드는 레이어 2 필드가되었습니다. 역 겨 운다. 그러나 그것은 나의 문제를 해결했다. 솔직히 말해서 빠른 시간 내에 제공되는 솔루션을 이해하지 못했고 시간은 돈 이었기 때문에 계속했습니다.

MVC에는 기본적으로이 기능이 없습니다.