我的ViewModel类有一个包含ShareClass
对象的属性。 ShareClass
有一个名为Id
的属性。
我目前正在将ShareClass id
传递给操作方法,如下所示:
public ActionResult ListedFactsheet(int shareClassId)
{
}
我希望能够使用ShareClassViewModel
而不是传递int
,如下所示:
public ActionResult ListedFactsheet(ShareClassViewModel scv)
{
// I'd like to be able to do something like: svc.ShareClass.Id;
}
我的ShareClassViewModel
定义为:
public class ShareClassViewModel
{
public ShareClass ShareClass { get; set; }
}
和ShareClass
定义为:
public class ShareClass
{
public virtual int Id { get; set; }
}
我当前的路线配置设置为:
routes.MapRoute(
null,
"listedfactsheet/{shareClassId}",
new { controller = "shareclass", action = "ListedFactsheet", shareClassId = -1 }
);
我需要以某种方式改变这种情况吗?是否有其他方法可以使模型绑定器绑定到视图模型属性中的属性?
我已经尝试更改路由,以便代替shareClassId
,它变成shareClass_Id
,希望ModelBinder知道它需要找到一个ShareClass对象来绑定Id,但是它不起作用。
答案 0 :(得分:1)
创建一个从DefaultModelBinder派生的ShareClassViewModelBinder类。覆盖BindModel方法。
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult valueProviderResult;
int shareClassId = -1;
if (bindingContext.ValueProvider.TryGetValue("shareClassId", out valueProviderResult))
{
shareClassId = valueProviderResult.ConvertTo(typeof(int));
}
ShareClassViewModel shareClassViewModel = ... // create Viewmodel instance
shareClassViewModel.ShareClass = new ShareClass() { Id = shareClassId };
return shareClassViewModel;
}
使用您的viewmodel类注册此模型绑定器。
[ModelBinder(typeof(ShareClassViewModelBinder))]
public class ShareClassViewModel {