【问题标题】:ASP .NET MVC4 Adding new items to view and model bindingASP .NET MVC4 向视图和模型绑定添加新项目
【发布时间】:2013-08-05 12:52:39
【问题描述】:

我为我的妻子创建了一个网站。她是一名教师,她希望有机会为他们的学生创建练习。例如,她想创建以下练习:

练习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; }

    }

我为我的练习创建了一个视图。我可以填写名称、描述、难度级别和类型等基本属性。然后我想创建一个按钮“添加锻炼项目”。单击时,应动态添加部分视图(或其他内容),其中可以提供新的练习项。 我试过以下: 我添加了一个按钮

@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>

它工作正常。但是,当我单击按钮创建整个练习时,我的模型中没有练习项集合:

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 对象列表绑定到我的模型练习?

【问题讨论】:

  • 你为什么使用部分来创建你的编辑器?是因为你的练习次数是动态的吗?
  • 是的,没错,我想要动态的运动项目数

标签: asp.net-mvc asp.net-mvc-4 model-binding


【解决方案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 找到它,我实际上是在尝试找到它 :)

【讨论】:

  • 这仍然是在 MVC4 中的方式吗?
猜你喜欢
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多