2013-01-15 5 views
1

내 시나리오가 복잡하므로 아래 예제를 사용하여 간단하게 만들었습니다. 가장 큰 문제는 Html.TextBoxFor(t => t.List[0].Name)이 아닌 Html.TextBox("List[0].Name")과 같은 속성 경로를 지정하는 모델의 바인딩 속성 바인딩입니다. 그래서, 현재보기에서 나는 모델의 메타 데이터 중 일부만 알게 될 것이고 그렇게하면 이런 식으로 구성해야 할 것입니다.바인딩 모델 속성 모음

모델

public class TestController: Controller 
{ 
    [HttpGet] 
    public ActionResult Test() 
    { 
     var model = new ModelTest() 
     { 
      Id = 455, 
      Collection = new List<Foo>() 
      { 
       new Foo(){ Value1 = "sagasga", Value2 = "Beul"}, 
       new Foo(){ Value1 = "dgdsgds", Value2 = "fhfhd" } 
      } 
     }; 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Test(ModelTest model) 
    { 
     //.... 
     return View(); 
    } 

보기

public class ModelTest 
{ 
    public int Id {get;set;} 
    public List<Foo> Collection {get;set;} 
} 

public class Foo 
{ 
    public string Value1 {get;set;} 
    public string Value2 {get;set;} 
} 

컨트롤러 : 내가 컬렉션 값에 대한 빈 텍스트 상자를 얻을 수 위의 코드에 대한

@using (Html.BeginForm()) 
{ 
    @Html.TextBox("Id") 
    @Html.TextBox("Collection[0].Value1") 
    @Html.TextBox("Collection[0].Value2") 
    <input type="submit" value="Add" /> 
} 

여기에 시나리오입니다. 그러나 페이지가 제출되면 Post 메서드에서 모델이 올바르게 작성됩니다.

많은 감사, 알렉스

답변

3

이것은 당신이 당신의 컨트롤러에 컬렉션을 게시 싶어 할 때 입력 필드의 이름을 수있는 방법입니다. 그러나 초기 값을 직접 지정해야합니다. 귀하의 코드는 현재 이름 속성이 Collection[0].Value1으로 설정된 텍스트 상자를 작성 중입니다. 이 방법으로 입력을 지정해야합니다.

@Html.TextBox("Collection[0].Value1", Model.Collection.FirstOrDefault().Value1) 
@Html.TextBox("Collection[0].Value2", Model.Collection.FirstOrDefault().Value2)