2013-01-24 46 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中做到这一点的方式吗? –