如何在NancyFX中将表单绑定到模型

时间:2012-06-21 08:01:01

标签: nancy

我是NancyFX的新手,并试图将发布的表单绑定到我的模型。

在尝试访问已发布值时的模块中,我运行以下语句:

        string email = this.Context.Request.Form["Email"];
        Debug.WriteLine(email);

结果是:  “Nancy.DynamicDictionaryValue”而非发布值

有人可以告诉我我正在做的新手错误:

表格如下:

<form method="post" action="account">
    <input type="text" id="Email" />
    <input type="password" id="Password" />
    <input type="submit" value="Create" />
</form>

模块构造函数中的路由:

       Post["/"] = parameters => CreateAccount(parameters);

2 个答案:

答案 0 :(得分:4)

动态字典返回一个动态值,如果你将它强制转换为字符串(隐式或显式),你将得到你想要的东西,或者只使用模型绑定器中的构建https://github.com/NancyFx/Nancy/wiki/Model-binding

答案 1 :(得分:3)

只需添加上面的正确答案,希望对像我这样的新手有用。

因为Nancy表单和查询的类型为dynamic,您可以使用表单或查询字符串参数的名称来访问值(请参阅示例代码中的termsmax )。我使用一个简单的基类只是为了在我的其余模块中使用语法。

注意:基类中的ExpandoObject Model就在那里,所以我可以在我的视图模型中抛出值,而不必担心强类型数据会使事情变得混乱 - 传输类(这也有助于防止暴露任何秘密域实例数据)。

public class SearchModule : _BaseModule
{
    public SearchModule(ISearchService searchService)
    {
         Get["/search"] = _ =>
            {
                if (!Query.terms.HasValue) return HttpStatusCode.BadRequest;
                var terms = (string) Query.terms;
                var max = (Query.max.HasValue) ? (int) Query.max : 3;
                Model.SearchResults = searchService.GetResults(max, terms);
                ...
            };
    }
}

public class _BaseModule : NancyModule
{
    protected dynamic Model = new ExpandoObject();
    public dynamic Query { get { return Request.Query; } }
    public dynamic Form { get { return Request.Form; } }
}