2013-01-24 45 views
0

我爲我的妻子創建一個網站。她是一名老師,她希望有可能爲學生創造練習。此案是,她想創建例如下面的練習:ASP .NET MVC4添加新項目查看和模型綁定

練習1:使用正確的詞填入了一句:

  1. 我的妻子是30 ........ .....老
  2. 我活在這個城市的30 .........

我有以下型號:

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"}) 

及相應的div:

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

我的操作方法如下所示:

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

和局部視圖:

@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

你爲什麼要用partial創建你的editorfor?這是因爲你有一個動態的練習數量? –

+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中做到這一點的方式嗎? –