ダイナミックプロパティを使用するエディタテンプレートを無駄に使用しようとしています。たぶんあなたの一人が私たちを助けることができます。Asp.Net MVC 3ダイナミックプロパティのエディタ
public class Criterion
{
...
public string Text { get; set; }
public dynamic Value { get; set; }
public Type Type { get; set; }
...
}
当社のかみそりビューは、それぞれがその中に基準のリストが含まれているセクションのリストをcontaingモデルを取得します。ここでは
は大体私たちのクラスです。 (私たちは、実行時にこれらに関する情報を取得します。)これらのすべての基準が編集モードで表示されなければならない - 彼らの実際の型に関する:(抜粋)
@for (int i = 0; i < model.Sections.Count(); i++)
{
for (int j = 0; j < model.Sections[i].Criteria.Count(); j++)
{
var criterion = model.Sections[i].Criteria[j];
var type = criterion.Type.Name;
var name = "Sections[" + i + "].Criteria[" + j + "].Value";
var criterionDisplayName = criterion.Text;
<label for="[email protected](i)[email protected](j)__Value">@criterionDisplayName</label>
@Html.Editor(name, type)
}
}
これは正しくインスタンスのチェックボックスを表示していますが、それが値を使用していませんチェックボックスのステータスを正しく設定します(criterion.Valueがtrueの場合にチェックされます)。 ints
のように他のタイプにも同じです。 (POSTリクエスト後にフォームに正しく入力されますが、これはMVCが一時的なモデルを使用してユーザーの入力を再作成するためです)。
私たちが試してみた限りでは、エディタタイプdynamic
のプロパティを持つテンプレート?はいの場合 - どのように機能させることができますか? (実際のタイプに基づいて適切なエディタテンプレートを使用するようMVCフレームワークを使用したいと考えています)
強く型付けされたビューで動作します。強く型付けされたビューを使わないようにIndex-Viewを変更しようとしました: '@model IList'を削除し、 '@ {var model =(IList )Model; } '。それから、@Html.Editor( "model" "+ i +"] .Value "、" Criterion_ "+ model [i] .Value.GetType()。Name)'を試してみましたが、エラーが出ます - _モデル辞書に渡された項目はnullですが、この辞書は 'System.Int32'型のnull以外のモデル項目を必要とします。何が間違っていますか?デバッグはGetType()。NameがIndex-Viewで 'Int32'であることを示しています。 –
toni
ところで、私たちは第三者フレームワーク(OrchardのContentShape)を使用しているので、強く型付けされていないビューを使用する必要があります。 – toni
上記のように 'object'を使ってDarinsアプローチを使用しました。動的ViewModelをキャストして強く型付けされたエディタテンプレートに渡すだけでした。貴重な情報をいただきありがとうございます。 – toni