0

ASP.NET MVC3アプリで作業していますが、ビューからコントローラーに呼び出しを行い、その情報を辞書として保存したいと思います。

コントローラーコード:

public Dictionary<string,int> foo()
{
    Dictionary<string,int> bar = new Dictionary<string,int>();
    bar.Add("test",100);
    return bar;
}

コードを表示:

@{ Dictionary<string,int> foobar = Html.Action("foo"); }
...
<div>@foobar["test"]</div>

を使用すればビューを機能させることができますがvar foobar = Html.Action("foo");、foobarはタイプSystem.Web.Mvc.MvcHtmlStringであるとだけ表示されるため、あまり使用できません。

不足している組み込み機能はありますか、それともJSON結果のようなものを使用する必要がありますか?

編集:追加情報

また、VS2010デバッガーでは、foobarがとして正しく認識される{System.Collections.Generic.Dictionary'2[System.String,System.Int32]}ため、foobarが正しく解決されないという問題があることにも注意してください。スローされるエラーは次のとおりです。

Compiler Error Message: CS0021: Cannot apply indexing with [] 
to an expression of type 'System.Web.Mvc.MvcHtmlString'

編集2

結果を辞書にキャストする際に発生したエラーは次のとおりです。

Url.Action("foo").ToDictionary<string,int>();CS1501: No overload for method 'ToDictionary' takes 0 arguments明らかな理由で返されましたが、VS2010デバッガーは結果がディクショナリであることを認識します。

バグ1

しかし、パラメーター(Url.Action("foo").ToDictionary<string,int>(x=>x);)を追加すると、それが辞書であると認識されなくなりますが、それらが適切なパラメーターであるかどうかはわかりません(ここで見つけたものに基づいています) 。

バグ2

4

2 に答える 2

1

ビューをダムに保つために、可能な限り努力する必要があります。コントローラはデータをビューにプッシュする必要があります。何らかの理由で、複雑な計算を実行する関数の呼び出しを実行する場合は、別の静的クラスを作成し、その関数をコントローラーからそのクラスに移動することをお勧めします。これHtml.Actionはまったく別の目的です。コントローラは、辞書やその他のタイプではなく、常にアクション結果を返す必要があります。

于 2012-07-18T14:18:12.317 に答える
0

Html.Action( "foo")を呼び出すと、文字列が返されることになっています。これが行っているのは、子ビューを文字列としてレンダリングするアクションメソッドを呼び出すことです。http://msdn.microsoft.com/en-us/library/ee721266を参照してください

静的ユーティリティメソッドを呼び出すことができます。これはMVC3の拡張メソッドまたはヘルパーメソッドですか?を参照してください。

于 2012-07-18T13:22:42.877 に答える