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>

Module contructorでのルーティング:

       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 に答える