2013-01-24 2 views
0

아내를위한 웹 사이트를 만듭니다. 그녀는 선생님이며 학생들을 위해 운동을 할 수있는 가능성을 갖고 싶어합니다.ASP .NET MVC4 뷰잉 및 모델 바인딩에 새 항목 추가

연습 1 : 올바른 단어를 사용하여 문장 채우기 :이 사건은 그녀가 예를 들어 다음과 같은 운동을 만들려는 것입니다

  1. 내 아내가 30 ........ ..... 옛날 내가 30이 도시에 살고
  2. .........

나는 다음과 같은 모델이 있습니다

,691을
public class Exercise 
     { 
      [Key] 
      public Guid Id { get; set; } 

      public string Name { get; set; } 

      public string Description { get; set; } 

      public ExerciseType Type { get; set; } 

      public DifficulityLevel DifficulityLevel { get; set; } 

      public List<ExerciseItem> Items { get; set; } 

      public DateTime TimeOfCreation { get; set; } 

      public DateTime TimeOfModification { get; set; } 

     } 

public class ExerciseItem 
    { 
     [Key] 
     public Guid Id { get; set; } 

     public string Content { get; set; } 

     public List<ExerciseItemOption> Options { get; set; } 

     public ExerciseItemOption CorrectSelection { get; set; } 

    } 

나는 내 운동을 위해보기를 만듭니다. 이름, 설명, Difficulity 레벨 및 유형과 같은 기본 속성을 채울 수 있습니다. 그런 다음 "운동 항목 추가"버튼을 만들고 싶습니다. 클릭하면 새로운 ExerciseItem을 제공 할 수있는 부분 뷰 (또는 다른 것)가 동적으로 추가되어야합니다. 난 다음에 시도했다 : 을 나는 버튼

@Ajax.ActionLink("Add exercise item", 
         "AddExerciseItem", 
         "Exercise", new AjaxOptions() { HttpMethod="GET", InsertionMode = InsertionMode.InsertBefore, UpdateTargetId="ExerciseItems"}) 

하고 해당 사업부를 추가 한 :

public ActionResult AddExerciseItem() 
     { 
      return PartialView("ExerciseItem", new ExerciseItem()); 
     } 

하고 다음과 같이

<div id="ExerciseItems"></div> 

내 액션 메소드 보인다 부분보기 :

@model ElangWeb.Models.ExerciseItem 
<fieldset> 
    <legend>ExerciseItem</legend> 

    @Html.HiddenFor(model => model.Id) 

    <div class="editor-label"> 
     @Html.DisplayNameFor(model => model.Content) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Content, new { style = "width:200px" }) 
    </div> 
</fieldset> 

잘 동작합니다. 나는 전체 운동을 만들기위한 버튼을 클릭하면 그러나, 나는 내 모델에서 ExerciseItem 수집을하지 않습니다

public ActionResult Create(Exercise exercise) 
     { 
      using (PersistanceManager pm = new PersistanceManager()) 
      { 
       exercise.Id = Guid.NewGuid(); 
       exercise.TimeOfCreation = DateTime.Now; 
       exercise.TimeOfModification = DateTime.Now; 
       pm.ExcerciseRepository.Add(exercise); 
      } 
      return RedirectToAction("Index"); 
     } 

가 어떻게 ExerciseItem 내 모델 운동에 객체를 추가 내 목록을 결합하기 위해 코드를 변경해야 ?

+0

왜 부분 편집기를 만들기 위해 사용합니까? 역동적 인 연습 문제가 있으니까요? –

+0

네, 그렇습니다. 나는 운동 아이템의 다이내믹 한 숫자를 갖고 싶습니다. –

답변

1

모델 바인딩에 대해 article을 확인하십시오. 당신은 기본적으로 운동 아이템에 대한 특별한 이름을 만들어서 바운드가 올바르게 이루어 지도록해야합니다.

부분 :

@model ElangWeb.Models.ExerciseItem 
<fieldset> 
    <legend>ExerciseItem</legend> 
    <label>content</label> 
    <input type="hidden" name="ExcersiseItem.Index" value="SomeUniqueValueForThisItem" /> 
    <input type="text" name="ExcersiseItem[SomeUniqueValueForThisItem].Name" value="@Model.Content" /> 
</fieldset>  

이 질문에 대한 대답은 MVC3 Non-Sequential Indices and DefaultModelBinder입니다. 그것을 찾아 주셔서 감사합니다 Yarx, 나는 실제로 그것을 찾으려고했습니다 :)

+0

대단합니다! 고마워요! –

+1

여전히 MVC4에서이 작업을 수행 할 수 있습니까? –