最近的NancyFX支持列表绑定https://github.com/NancyFx/Nancy/wiki/Model-binding,但它对我不起作用。
对于集合模型绑定测试,我创建了一个类似stackoverflow的问题模型:
public class Question
{
public int Id { get; set; }
public string Name { get; set; }
public List<Answer> Answers { get; set; }
public List<Comment> Comments { get; set; }
}
public class Answer
{
public int Id { get; set; }
public string Name { get; set; }
public List<Comment> Comments { get; set; }
}
public class Comment
{
public int Id { get; set; }
public string Name { get; set; }
}
我绑定它:
Post["/question"] = parameters =>
{
Question question = this.Bind();
return View["question.html", question];
};
在HTML表单中,我尝试了不同的东西:
<form action="/question" method="post">
<ul>
<li>
<input type="text" name="Name" value="Question Name" />
<input type="text" name="Id" value="1" />
</li>
<li>
<ul>
<li>
<input type="text" name="Answers[0].Name" value="Answer 1 Name" />
<input type="text" name="Answers[0].Id" value="1" />
</li>
<li>
<input type="text" name="Answers[1].Name" value="Answer 2 Name" />
<input type="text" name="Answers[1].Id" value="2" />
</li>
<li>
<input type="text" name="Answers[2].Name" value="Answer 3 Name" />
<input type="text" name="Answers[2].Id" value="3" />
</li>
</ul>
</li>
</ul>
<input type="submit" />
</form>
还有:
<form action="/question" method="post">
<ul>
<li>
<input type="text" name="Name" value="Question Name" />
<input type="text" name="Id" value="1" />
</li>
<li>
<ul>
<li>
<input type="text" name="Question[Answers][0].Name" value="Answer 1 Name" />
<input type="text" name="Question[Answers][0].Id" value="1" />
</li>
<li>
<input type="text" name="Question[Answers][1].Name" value="Answer 2 Name" />
<input type="text" name="Question[Answers][1].Id" value="2" />
</li>
<li>
<input type="text" name="Question[Answers][2].Name" value="Answer 3 Name" />
<input type="text" name="Question[Answers][2].Id" value="3" />
</li>
</ul>
</li>
</ul>
<input type="submit" />
</form>
但是当问题的名称和ID被正确绑定时,它不会将Answers的集合绑定到Question对象。
它有什么问题以及如何正确绑定这个嵌套集合?
稍后我会尝试将一组评论绑定到问题和答案对象。
答案 0 :(得分:1)
某处似乎确实存在错误。
它似乎没有绑定List&amp;列表为空。
如果你这样做:
<form action="/" method="post">
<ul>
<li>
<input type="text" name="Name[0]" value="Question Name" />
<input type="text" name="Id[0]" value="1" />
<input type="text" name="Name[1]" value="Question Name2" />
<input type="text" name="Id[1]" value="2" />
</li>
<ul>
</form>
然后用:
绑定Post["/"] = parameters =>
{
var model = this.Bind<List<Question>>();
return 200;
};
它会为您提供2个具有正确值的项目。
将Answers输入添加回来后,无法绑定问题。
请在存储库中记录问题 - https://github.com/NancyFx/Nancy/issues?milestone=&page=1&state=open
如果您想更好地调查并发送拉取请求:)