2012-06-21 54 views
2

我是NancyFX的新手,並嘗試將張貼的表單簡單地綁定到我的模型。如何將表單綁定到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

動態辭典返回一個動態值,如果你把它轉換爲一個字符串(或明或暗地),你會得到你想要的東西,或者只是使用構建模型粘合劑https://github.com/NancyFx/Nancy/wiki/Model-binding

+1

但這只是問題所在。我沒有得到我發佈的價值。我也試過這個 - > CreateAccountModel model = this.Bind(); 其中model.Email在綁定 –

+6

@JanOhlson後爲空您還應該在您的html中使用name屬性,而不是id? –

3

只要加上上面的正確答案,希望對像我這樣的nancy-newbies很有幫助。

由於南西形式和查詢的類型的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; } } 
} 
相關問題