我是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);
答案 0 :(得分:4)
动态字典返回一个动态值,如果你将它强制转换为字符串(隐式或显式),你将得到你想要的东西,或者只使用模型绑定器中的构建https://github.com/NancyFx/Nancy/wiki/Model-binding
答案 1 :(得分:3)
只需添加上面的正确答案,希望对像我这样的新手有用。
因为Nancy表单和查询的类型为dynamic
,您可以使用表单或查询字符串参数的名称来访问值(请参阅示例代码中的terms
和max
)。我使用一个简单的基类只是为了在我的其余模块中使用语法。
注意:基类中的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; } }
}