嵌套列表绑定不起作用

时间:2013-09-20 08:39:07

标签: nancy

最近的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对象。

它有什么问题以及如何正确绑定这个嵌套集合?

稍后我会尝试将一组评论绑定到问题和答案对象。

1 个答案:

答案 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

如果您想更好地调查并发送拉取请求:)