GUID ID未绑定的集合

时间:2018-01-19 17:05:01

标签: c# asp.net-mvc razor asp.net-mvc-5

我有一对非常简单的课程:

public class Question
{
    [Key]
    public int QuestionId { get; set; }
    [Required]
    [Display(Name ="Question Text")]
    public string QuestionText { get; set; }

    public virtual IList<Answer> Answers { get; set; }
}

public class Answer : IValidatableObject
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid AnswerId { get; set; }
    [Required]
    [Display(Name = "Answer Text")]
    public string AnswerText { get; set; }
    [Required]
    [Display(Name = "Is Correct")]
    public bool IsCorrect { get; set; }
}

我正在尝试使用MVC编辑页面来编辑问题和答案。所以我有这样的事情:

@using (Html.BeginForm())
{
   <input type="submit" value="Save Question" class="btn btn-default" />

   @Html.HiddenFor(model => model.QuestionId)
   @Html.EditorFor(model => model.QuestionText, new { htmlAttributes = new { @class = "form-control" } })

   <h4>Answers:</h4>
   @Html.EditorFor(model => model.Answers)
}

Answer这样的模板:

@Html.HiddenFor(model => model.AnswerId)
@Html.EditorFor(model => model.AnswerText, new { htmlAttributes = new { @class = "form-control" } })
@Html.EditorFor(model => model.IsCorrect)

加载页面一切看起来都不错。我可以看到它对问题和答案都有所约束。但在提交时,Question对象已填充,但Answers为空。但看起来提交确实包含了我期望的所有领域:

QuestionId:36
QuestionText:This is a test
Answers[0].AnswerId:0b5a2bdd-32fd-e711-93fc-b8ca3a683254
Answers[0].AnswerText:TRUE
Answers[0].IsCorrect:true
Answers[0].IsCorrect:false
Answers[1].AnswerId:0c5a2bdd-32fd-e711-93fc-b8ca3a683254
Answers[1].AnswerText:FALSE
Answers[1].IsCorrect:false

那么这里发生了什么?从我所读过的内容(很多以前版本的MVC)来看,这应该可行。是因为使用GUID作为id吗?我错过了什么使这个绑定正确?

最终,我希望能够添加和删除Answers,但这里一步一步。

编辑:奇怪的是它发送Answers[0].IsCorrect两次。这是生成的HTML:

<input checked="checked" class="check-box" data-val="true" data-val-required="The Is Correct field is required." id="Answers_0__IsCorrect" name="Answers[0].IsCorrect" type="checkbox" value="true">
<input name="Answers[0].IsCorrect" type="hidden" value="false">

对于其生成的其他答案(Answer[1]),只会为Answers[1].IsCorrect生成一个值:

<input class="check-box" data-val="true" data-val-required="The Is Correct field is required." id="Answers_1__IsCorrect" name="Answers[1].IsCorrect" type="checkbox" value="true">
<input name="Answers[1].IsCorrect" type="hidden" value="false">

0 个答案:

没有答案