次のルートを想定します。
{region}/{storehouse}/{controller}/{action}
これらの 2 つのパラメーターregion
とstorehouse
全体で、単一のエンティティー a を識別しますStorehouse
。したがって、いくつかの倉庫のコンテキストで一連のコントローラーが呼び出されています。そして、次のようなアクションを書きたいと思います:
public ActionResult SomeAction(Storehouse storehouse, ...)
ここであなたの考えを読むことができます:「カスタムモデルバインダーを書いてください、男」。そうです。ただし、質問は
カスタム モデル バインダー内で魔法の文字列を回避するにはどうすればよいですか?
これが私の現在のコードです:
public class StorehouseModelBinder : IModelBinder
{
readonly IStorehouseRepository repository;
public StorehouseModelBinder(IStorehouseRepository repository)
{
this.repository = repository;
}
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var region = bindingContext.ValueProvider.GetValue("region").AttemptedValue;
var storehouse = bindingContext.ValueProvider.GetValue("storehouse").AttemptedValue;
return repository.GetByKey(region, storehouse);
}
}
単一のキーがあれば、bindingContext.ModelName
使用できます...
おそらく、すべてのアクションにオブジェクトを提供する別の方法がありStorehouse
ます。つまり、コントローラーのプロパティとして宣言し、Controller.Initialize
.