我有以下简单的模型:
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>
我在这里做错了什么?
答案 0 :(得分: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开始计数,你就不会得到任何帖子值,因为mvc在索引1之前想要索引0
以下属性不在您的模型中,是吗?
<input type="hidden" value="1" name="Questions[2].Answers.Index">
答案 1 :(得分:0)
以下是解决这个问题的方法:
Model Binding To List Of Objects In 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" })