2

最近的 NancyFX 支持列表绑定https://github.com/NancyFx/Nancy/wiki/Model-binding但它对我不起作用。

对于集合模型绑定测试,我创建了一个类似 stackoverflow 的 Question 模型:

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>

但它不会将 Answers 集合绑定到 Question 对象,而问题的 Name 和 Id 已正确绑定。

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

稍后我将尝试将一组评论绑定到 Question 和 Answer 对象。

4

1 回答 1

1

某处似乎确实存在错误。

它似乎没有绑定列表和列表,因为它们为空。

此外,如果你这样做:

<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 个具有正确值的项目。

一旦您添加回答案输入,它就无法绑定问题。

请在存储库中记录问题 - https://github.com/NancyFx/Nancy/issues?milestone=&page=1&state=open

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

于 2013-09-20T10:23:19.267 回答