假设我有类似以下的路线
/{controller}/{action}/{id}
是否可以将id绑定到我的模型中的属性
public ActionResult Update(Model model)
{
model.Details.Id <-- Should contain the value from the route...
}
我的模型类如下?
public class Model
{
public Details Details {get;set;}
}
public class Details
{
public int Id {get;set;}
}
答案 0 :(得分:2)
您需要创建自己的自定义模型装订器。
public class SomeModelBinder : IModelBinder {
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
ValueProviderResult value = bindingContext.ValueProvider.GetValue("id");
SomeModel model = new SomeModel() { Details = new Details() };
model.Details.Id = int.Parse(value.AttemptedValue);
//Or you can load the information from the database based on the Id, whatever you want.
return model;
}
}
要注册您的活页夹,请将其添加到Application_Start()
ModelBinders.Binders.Add(typeof(SomeModel), new SomeModelBinder());
然后您的控制器看起来与上面的完全一致。这是一个非常简单的例子,但是最简单的方法。我很乐意提供任何额外的帮助。