0

머리글별로 그룹화 한 항목이 여러 개 있습니다.편집기 템플릿을 사용하여 IEnumerable <IGrouping <string, Model >>을 표시하는 방법

헤더 텍스트가있는 페이지에 각 개별 항목의 편집기 템플릿이 표시되도록하고 싶습니다.

메인 페이지 :

@Html.EditorFor(x => x.GroupedItems, "ListofGrouping"); 

ListofGrouping 편집기 템플릿 :

@model IList<IGrouping<string, Model>> 
@for(int i = 0; i < Model.Count(); i++) 
{ 
    @Html.EditorFor(x => x[i],"IGrouping") 
} 

IGrouping 편집기 템플릿 :

@model IGrouping<string, Model> 

@Html.DisplayFor(x => x.Key) 
@Html.EditorForModel() 

이를

나는 다음과 같이 중첩 된 템플릿을 사용하여 시도 마지막 줄까지 작동합니다. 헤더 값은 모두 가져 오지만 개별 항목은 표시되지 않습니다.

이 방법으로 작동시키지 못하면 데이터 그리드를 사용하고 그룹화를 수행하지만 MVC3에서 가능해야한다고 생각했습니다.

답변

0

업데이트 : 당신은 IGrouping에 대한 자신의 EditorTemplate를 작성해야합니다. IGrouping에 대한 EditorTemplate의

샘플 : 모델 :

public class Row 
{ 
    public Row() 
    { 
    } 

    public Row(string key, int value) 
    { 
     Key = key; 
     Value = value; 
    } 

    public int Value { get; set; } 

    public string Key { get; set; } 
} 

컨트롤러 :

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     ViewBag.Message = "Welcome to ASP.NET MVC!"; 
     IEnumerable<Row> dict = new[] { new Row("1", 1), new Row("1", 2), new Row("1", 3), new Row("2", 2), new Row("2", 3), new Row("2", 4) }; 
     var grouped = dict.GroupBy(c => c.Key).First(); 
     //var grouplist = grouped.Select(c => new KeyValuePair<string, IEnumerable<int>> (c.Key, c.Select(b=>b.Value))); 
     return View(grouped); 
    } 

    public ActionResult Post(IEnumerable<Row> Model) 
    { 
     return null; 
    } 
} 

보기 색인 :

@model IGrouping<string, MvcApplication1.Models.Row> 
@{ 
    ViewBag.Title = "Home Page"; 
} 

@using(Html.BeginForm("Post", "Home", FormMethod.Post)) 
{ 
    @Html.EditorForModel("IGrouping") 
    <button type="submit">Submit</button> 
} 

EditorTemplate IGrouping.cshtml : 당신이 읽을 수있는 바인딩 컬렉션에 대한

@model IGrouping<string, MvcApplication1.Models.Row> 
@{ 
    @Html.DisplayFor(m => m.Key) 
    int i = 0; 
    foreach (var pair in Model.Select(c => c)) 
    { 
     @Html.Hidden(string.Format("Model[{0}].Key", i), pair.Key) 
     @Html.TextBox(string.Format("Model[{0}].Value", i), pair.Value) 
     i++; 
    } 
} 

더 : Hancelman's blog

+0

컴파일되지 않음 – Kelly

+0

"컬렉션"템플릿의 내용을 표시 할 수 있습니까? –

+0

실제로 템플릿에 내장되어 있으므로 "Collection"매개 변수의 유무와 상관없이 작동해야합니다. – Kelly

0

IGrouping는 또한 를 IEnumerable 것을 기억하십시오. 따라서 @Html.EditorForModel()을 사용하는 대신 항목을 열거하십시오.

@model IGrouping<string, Model> 

@Html.DisplayFor(x => x.Key) 
foreach (var grp in Model) 
{ 
    @Html.EditorFor(model => grp) 
}