2

我有以下简单模型:

public class MainModel
{
    public int Id {get;set;}
    public List<Question> Questions {get;set;}
}

public class Question
{
    public string Text {get;set;}
    public List<Answer> Answers {get;set;}
}

public class Answer
{
    public byte No {get;set;}
    public string Text {get;set;}
    public bool Correct {get;set;}
}

我有 MainModel 的强类型视图,它允许用户为每个问题添加自定义数量的问题和答案(并删除它们)。

我正在使用添加隐藏索引字段的方法,它适用于问题级别(动态添加的问题包含在 POST 中)。但是,当涉及到动态添加的答案时,它无法正常工作。这是我渲染的 HTML:

<div class="answer">
<input type="hidden" value="1" name="Questions[2].Answers.Index">
<input type="checkbox" data-checkbox-for="Questions[2].Answers[1].Correct" checked="checked">
<input type="hidden" value="1" name="Questions[2].Answers[1].No">
<input type="text" value="2.1" name="Questions[2].Answers[1].Text">
<input type="hidden" value="true" name="Questions[2].Answers[1].Correct">
<span class="remove-answer link">Remove</span>
</div>

我在这里做错了什么?

4

2 回答 2

1

你从零索引开始吗?

 <div class="answer">
<input type="hidden" value="1" name="Questions[2].Answers.Index">
<input type="checkbox" data-checkbox-for="Questions[2].Answers[0].Correct" checked="checked">
<input type="hidden" value="1" name="Questions[2].Answers[0].No">
<input type="text" value="2.1" name="Questions[2].Answers[0].Text">
<input type="hidden" value="true" name="Questions[2].Answers[0].Correct">
<span class="remove-answer link">Remove</span> 

如果你不从 0 开始计数,你将不会得到任何 post 值,因为 mvc 想要索引 0 在索引 1 之前

并且以下属性不在您的模型中,是吗?

<input type="hidden" value="1" name="Questions[2].Answers.Index">
于 2012-10-11T20:17:16.653 回答
0

这是解决这个问题的方法:

模型绑定到 ASP.NET MVC 中的对象列表

确保使用某种randomness. 这样,您可以在各种索引值之间产生“间隙”。

像这样的东西:

var random = new Random(10);
var rnd = random.Next();

@Html.Hidden("Questions[" + (i) + "].Answers.Index", i + j + rnd)
@Html.TextBox("Questions[" + (i) + "].Answers[" + (i + j + rnd) + "].Text", Model.Questions[i].Answers[j].Text, new { @class = "form-control" })
于 2014-12-29T18:05:50.693 回答