【问题标题】:How to bind form to model in NancyFX如何在 NancyFX 中将表单绑定到模型
【发布时间】:2012-07-22 05:09:27
【问题描述】:

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

【问题讨论】:

    标签: nancy


    【解决方案1】:

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

    【讨论】:

    • 但这就是问题所在。我没有得到我发布的值。我也试过这个 -> CreateAccountModel model = this.Bind();其中model.Email在绑定后为空
    • @JanOhlson 您还应该在 html 中使用 name 属性,而不是 id?
    【解决方案2】:

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

    由于 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; } }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多