私は次のようなモデルを持っています:
public class SampleModel
{
public static SampleModel Create()
{
return new SampleModel
{
Boolean = true,
// set several more properties...
Colors = new SelectList(new[] { "Red", "Green", "Blue" }, "Green")
};
}
public bool Boolean { get; set; }
// define several more properties...
public SelectList Colors { get; set; }
}
Html.DisplayForModel()
ASP.NET MVCに、詳細ビューとHtml.EditorForModel()
編集ビューに使用するプロパティを自動的にスキャフォールディングさせています。
結果:
編集ビューはうまく機能します。
Colors
は3つの項目(赤、緑、青)のメニューとして表示され、デフォルトでは緑が選択されています。ただし、詳細ビューの場合、「False True False」が
IsSelected
表示されます。これは、メニューの各項目の値のリストであるようです。それは絶対に私が望んでいないことです。「緑」だけを表示したいのですが。さらに問題は、コントローラーで実行しようとすると
UpdateModel(sampleModel)
、「このオブジェクトにパラメーターなしのコンストラクターが定義されていません」というエラーが発生することです。これはおそらく、Colors
がでSelectList
あり、のパラメータなしのコンストラクタがSelectList
ないため、バインディングを完了できないためです。
したがって、問題が何であるかは理解できたと思いますが、このシナリオには実際に良い解決策を使用できます。これは、外部キーを持つモデルオブジェクトがある場合によく発生するようです。
いくつかの質問:
Colors
[編集]ビューのメニューとして表示され、[詳細]ビューには単純な文字列値(「緑」など)として表示されるようにするにはどうすればよいですか?- を含むモデルを更新するときに「パラメーターなしのコンストラクターがない」エラーを防ぐにはどうすればよい
SelectList
ですか? - Model / ViewModelに実際にの
ColorId
代わりに外部キーが含まれている場合Colors
、詳細ビューに現在の色の名前を表示させ、編集ビューにリストされているすべての色の名前を含むメニューを表示させるためのベストプラクティスは何でしょうか。Color
私のデータベースのテーブル。それが役立つ場合は、LinqToSql(SqlMetal)を使用してモデルクラスを生成しています。