이것은 일반적인 경우에 상상하는 간단해진다는 버전 뭐한테 I& # 39 m, 곧 추정했다. 사실 더 레이어에는 중첩할 내거냐 대한 몇 가지 있다.
그러나 이처럼 책정안
테마 map_layer List< Category>; 범주입니다 map_layer List< Product>; 제품 map_layer List< Order>;
내 컨트롤러거 는 이를 위해 이달 안에 있는 모든 범주입니다 완벽히 테마 테마, 즉, 범주 및 그들의 제품을 말한다.
등록 정보 수집이 명령이라구요 불렀으매 수량 (다른 많은 가운데) 이 필요한 editable.
@model ViewModels.MyViewModels.Theme
@Html.LabelFor(Model.Theme.name)
@foreach (var category in Model.Theme)
{
@Html.LabelFor(category.name)
@foreach(var product in theme.Products)
{
@Html.LabelFor(product.name)
@foreach(var order in product.Orders)
{
@Html.TextBoxFor(order.Quantity)
@Html.TextAreaFor(order.Note)
@Html.EditorFor(order.DateRequestedDeliveryFor)
}
}
}
그 후 것 대신 사용하고 있는 람다 단지 afaq 대한 참조입니다 top Model), " 객체에는 theme"; 그러나 루프지 포리치 내의 없습니다.
위의 함께 얻을 수 있는 등, 에디토퍼 테스트상자퍼 오류가
>. CS0411: 인자 메서드로부터 유형 >. & # 39 스모델 TProperty> System.Web.Mvc.Html.InputExtensions.TextBoxFor<;; (System.Web.Mvc.HtmlHelper< TModel>,, >. & # 39,,, System.Func< system.linq.expressions.expression< 스모델 TProperty> >) >. 사용 추론할 수 없습니다. Specifying 시도하시겠습니까 인수만 유형 >. 명시적으로.
감사합니다.
결론부터 말씀드리자면, 사용할 수 있는 ' () 에 대한' 대신 '루프 (loop 너회의' 포리치 (). 다음과 같은 항목을
@for(var themeIndex = 0; themeIndex < Model.Theme.Count(); themeIndex++)
{
@Html.LabelFor(model => model.Theme[themeIndex])
@for(var productIndex=0; productIndex < Model.Theme[themeIndex].Products.Count(); productIndex++)
{
@Html.LabelFor(model=>model.Theme[themeIndex].Products[productIndex].name)
@for(var orderIndex=0; orderIndex < Model.Theme[themeIndex].Products[productIndex].Orders; orderIndex++)
{
@Html.TextBoxFor(model => model.Theme[themeIndex].Products[productIndex].Orders[orderIndex].Quantity)
@Html.TextAreaFor(model => model.Theme[themeIndex].Products[productIndex].Orders[orderIndex].Note)
@Html.EditorFor(model => model.Theme[themeIndex].Products[productIndex].Orders[orderIndex].DateRequestedDeliveryFor)
}
}
}
public static MvcHtmlString TextBoxFor<TModel, TProperty>(
this HtmlHelper<TMoDel> htmlHelper,
Expression<Func<TModel, TProperty>> expression
)
첫째, 이는 확장명으로 방법 ',', ',' 사마이헬퍼 강력히 입력되었는지 유형의 < TModel>. 따라서 단순히 이 동영상을 볼 때 어떤 일이 발생합니까 behind the scenes a 클래스 생성하는지 자르기 렌더링합니다 상태. 이 클래스의 인사이드라면 인스턴스입니다 TModel> HtmlHelper<, ',' (그 때문에, 이 Html '속성' '@Html 사용할 수 있습니다.'), 여기서 '네' 유형 '에 정의된 @model 스모델 "는 성명을 발표했다. 따라서 케이스에 고려할 때는 '스모델' 이 보기 항상 '유형' 비에프모델s.미비에프모델스트시메 될 것입니다. 이제 다음 인수는 좀 까다로운. 살펴보겠습니다 오버클로킹된 호출
@Html.TextBoxFor(model=>model.SomeProperty);
그래서 우리는 할 수 있는 ',' 에 대한 확실한 이해 뭐한테 Expression< > 사마라스테스트상자퍼 돌아가 ','. 텍스트 상자, 렌더링합니다 필요할 때
그래서 우리는 일단 확보하십시오 간략하게 그 모델에 대한 의논하십시오 바인더. # 39 에 간단히 얻을 수 있을 때, 마치 균등형 it& 게시하기를 양식 ',' string> Dictionary<, 문자열, 우리는 우리의 뷰 (view) 모델 계층 구조를 손실됩니다 네스트된 가질 수 있었다. # 39 의 it&.
이? 너회가 했겠어 사용하여 key" "; 된 입력입니다 또는 이름을 올렸다. 만일 양식 게시물로의 같은데
Foo.Bar.Baz.FooBar = Hello
그리고 넌 게시 '' 라는 모델로 한 후 섬비에프모델 역동기화에 않니다 뭐한테 helper) 에서 1 위를 차지했다. 찾습니다 속성 불렀으매 Foo" ";). 그런 다음, 속성 호출됨 " Bar" 찾습니다. ,,) 의 오프하도록 " foo" 관심용 baz" " 찾습니다. 및 드릴링됩니다. 마지막으로, FooBar" 꽂으십시오 유형의 " 가치를 분석할 수 있는 것이다. 및 할당하십시오 FooBar" ";).
그렇게 말할 수 있는 부분, 그냥 렌더링됩니다 Baz" " 했다. (전에) 의 예). 그냥 기도하라주여 수 있는 부분
@Html.TextBoxFor(model=>model.FooBar)
대신
@Html.TextBoxFor(model=>model.Foo.Bar.Baz.FooBar)
따라서 이런 태그 입력 발생합니다.
<input name="FooBar" />
이제 이 모든 것을 할 수 있는 아주 흥미로운 확보하십시오 한 번 시작하면 됩니다. ',' 또한 프로그래밍 방식으로 이를 확장하여 의해 > Expression<. 깔끔한 것을 다른 이들과 함께. 내가 won& iqn. # 39 를 특정 수 없다. 하지만, 이렇게 하면 잘하면 더 나은 이해를 제공하십시오 뒤에 어떤 일이 진행되고 있다는 것을 왜 연기 장면 등을 운행에서어떠한 있다.
그렇게 하려면 단순히 디터템플라테스 사용할 수 있습니다.) 라는 디렉터리입니다 " editortemplates" 만들어야 합니다. # 39 에 폴더 보기 위해 별도의 장소를 볼 수 있는 controller& 여러분의 각 네스트된 엔티티에는 (로 엔티티입니다 클래스 이름)
주 보기:
@model ViewModels.MyViewModels.Theme
@Html.LabelFor(Model.Theme.name)
@Html.EditorFor(Model.Theme.Categories)
범주입니다 보기 (/MyController/EditorTemplates/Category.cshtml):
@model ViewModels.MyViewModels.Category
@Html.LabelFor(Model.Name)
@Html.EditorFor(Model.Products)
제품 보기 (/MyController/EditorTemplates/Product.cshtml):
@model ViewModels.MyViewModels.Product
@Html.LabelFor(Model.Name)
@Html.EditorFor(Model.Orders)
및 드릴링됩니다
이렇게 타마라자이디토퍼 helper 가 생성한 element& # 39 의 이름에 따라 더 이상 문제가 없는 순서화된 분할합니다 너회가 won& # 39, 전체적으로 테마 엔티티에는 게시하기를 검색
각 부분 부분 및 제품 범주입니다 추가할 수 있다, 작은 부분을 it& # 39 의 고유한 기본 모델 등 조치를 취할 것이라고, 모델, 즉 Category& # 39 의 모델 유형, Category> IEnumerable< 될 수 있다는 것과, 모델스타메 통과될 수 있도록 한다. # 39 의 부분 IEnumerable< 될 수 있는 Product& Product>; () 의 범주 내에서 부분) 에 모델리프로두치스 전달하십시오 합니다.
이후 이 질문에 게시, ve, I& # 39 개 이상) 이 가장 쉬운 방법은 qopenmp 디터템플라테스 찾아 처리하십니까 리피팅 입력입니다 그룹화합니다. 이 핸들이 자동으로 사용자의 모든 검증 메시지 문제 및 양식 제출 / 모델 바인딩하면 비애.
View 를 사용할 때 포리치 루프 내에 비네트 모델이다. 이 모델은 위해서는 나열되는지 형식으로 돼 있다.
이리에
@model IEnumerable<ViewModels.MyViewModels>
@{
if (Model.Count() > 0)
{
@Html.DisplayFor(modelItem => Model.Theme.FirstOrDefault().name)
@foreach (var theme in Model.Theme)
{
@Html.DisplayFor(modelItem => theme.name)
@foreach(var product in theme.Products)
{
@Html.DisplayFor(modelItem => product.name)
@foreach(var order in product.Orders)
{
@Html.TextBoxFor(modelItem => order.Quantity)
@Html.TextAreaFor(modelItem => order.Note)
@Html.EditorFor(modelItem => order.DateRequestedDeliveryFor)
}
}
}
}else{
<span>No Theam avaiable</span>
}
}
분명한 것은 &solarisdvd 오류:.
함께 붙어 있는 사마이헬퍼스 " For"; 람다 표현으로 매개변수입니다 있을 것으로 기대하고 있다.
더 효율적으로 사용할 경우, 보통 한 값을 직접 반군지역.
예:
대신 테스트상자퍼 (.) 사용하여 텍스트 상자 ()
과연 사마라스테스트상자퍼 테스트상자퍼 구문 (m = 마리프로페티 >)
For 루프는 환경에서 사용할 수 있는 만큼 기본적인 책정안 부여하느뇨 너회가 인덱스화할 사용할 수 있습니다.
@for(int i=0;i<Model.Theme.Count;i++)
{
@Html.LabelFor(m=>m.Theme[i].name)
@for(int j=0;j<Model.Theme[i].Products.Count;j++) )
{
@Html.LabelFor(m=>m.Theme[i].Products[j].name)
@for(int k=0;k<Model.Theme[i].Products[j].Orders.Count;k++)
{
@Html.TextBoxFor(m=>Model.Theme[i].Products[j].Orders[k].Quantity)
@Html.TextAreaFor(m=>Model.Theme[i].Products[j].Orders[k].Note)
@Html.EditorFor(m=>Model.Theme[i].Products[j].Orders[k].DateRequestedDeliveryFor)
}
}
}