短い質問:
オブジェクトの値をプレーンな文字列から変換するための暗黙的な変換メカニズムを提供した場合、ViewModel のプロパティに自動バインドすることはできますか?
詳細:
私はそのような複雑なオブジェクトを持っています(簡潔さと明確さのために単純化されています)
public enum PrimaryScopeEnum {
Pivot1,
Pivot2
}
public enum SecondaryScopeEnum {
Entity1,
Entity2,
Entity3,
Entity4
}
public class DataScope {
public PrimaryScopeEnum PrimaryScope { get; set; }
public SecondaryScopeEnum SecondaryScope { get; set; }
public static implicit operator DataScope ( string combinedScope ) {
DataScope ds = new DataScope();
// Logic for populating Primary and Secondary Scope enums
return ds;
}
}
以下のように、ビューモデルで上記のオブジェクトを使用しています。
public enum PageModeEnum {
View,
Add,
Edit
}
public class DisplayInfoViewModel {
public string SetID { get; set; }
public PageModeEnum PageMode { get; set; }
public DataScope Scope { get; set; }
}
そして、コントローラーのアクションは次のように設定されています
// Accessed with /MyController/DisplayInfo?SetID=22&PageMode=View&Scope=Pivot1
public virtual ActionResult DisplayInfo ( DisplayInfoViewModel vm ) {
// vm.SetID is 22
// vm.PageMode is PageModeEnum.View
// vm.Scope is null
return View ( vm );
}
私の問題はアクションにあります。文字列からクラスへの暗黙的なキャストを行ったにもかかわらず、DataScope
実行中に適切にバインドできません。
渡された値 (ここでは Pivot1) を個別に使用してキャストをテストしましたが、キャストは正常に機能します。
このキャストを暗黙的に行う方法はありますか、またはビューモデルScope
変数をプレーン文字列に変更してから手動でキャストする必要があります。