2

我是 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);
4

2 回答 2

4

动态字典返回一个动态值,如果你将它转换为一个字符串(隐式或显式)你会得到你想要的,或者只是使用内置模型绑定器https://github.com/NancyFx/Nancy/wiki/模型绑定

于 2012-06-21T08:25:45.663 回答
3

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

由于 Nancy Form 和 Query 属于类型dynamic,因此您可以使用表单名称或查询字符串参数访问值(参见示例代码中的terms和)。max我使用一个简单的基类只是为了使我的其余模块中的语法更简洁。

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

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; } }
}
于 2012-06-21T23:52:35.673 回答