2016-09-13 4 views
1

NancyFxのSuper Simple View Engineを使用して、実行中にViewBagでフロントエンドに送信された文字列のリストを反復する方法の簡単な例を作成しようとしています.Netコア。しかし、@Eachステートメントにリストを添付すると、単にエラーが発生します。しかし、私はカスタムオブジェクトでラップした後、リストを印刷することができました。モデルを持たないSuper Simple View Engineでリストを反復する

public class ViewHolder 
{ 
    public List<string> listOfThings { get; set; } 
} 
... 
ViewHolder boxIt = new ViewHolder(); 
boxIt.listOfThings = someList; 
ViewBag.viewPasser = boxIt; 

そして、フロントエンドに:

@Each.Context.ViewBag.viewPasser.listOfThings 
    @Current 
@EndEach 

これは私が欲しいものを達成したが、@Eachはラッパークラスなしで私のリストを認識しない理由を私は理解していません。余分なボクシングなしでこれを行う方法はありますか?

答えて

1

ビューバックを使用する代わりに、コレクションをモデルとしてビューに渡すことで、探しているものを達成できます。私はNancyFxのソースコードに掘って、あなたが見ている問題の最終的な責任だったファイルを通じて段階

 
    in module 
    ... 
    var items = new List(); 
    items.Add("Item1"); 
    items.Add("Item2"); 
    items.Add("Item3"); 
    return View["Index", items]; 


    in view 
    ... 
    @Each 
     @Current 
    @EndEach 

:ここでそれを行う方法の例があります。起こっていることは、そのコードでは、NancyがViewBagのコレクションをIEnumerableにキャストしようとしていて、失敗しているということです。 ViewBagにコレクションを直接配置し、Nancyがキャストしようとすると、そのコレクションのタイプはListではなくダイナミックなので、キャストはnullで失敗し、Nancyは[ERR!]を返します。ただし、そのリストをクラスにドロップし、そのクラスのインスタンスをViewBagに配置すると、型を正しく調整してキャストを実行できます。まだ非常に有用ではないが、うまくいけば明らかな矛盾の理由をもう少し詳しく知ることができます。

関連する問題