假设以下路线:
{region}/{storehouse}/{controller}/{action}
这两个参数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
.