2010-08-16 54 views
1

我的ViewModel類有一個屬性,其中包含一個ShareClass對象。 ShareClass有一個屬性Id我如何模型綁定到我的ViewModel中存在的屬性?

我目前經過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,但它不起作用。

回答

1

創建一個類ShareClassViewModelBinder,派生自DefaultModelBinder。覆蓋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; 
} 

註冊此modelbinder與您的viewmodel類。

[ModelBinder(typeof(ShareClassViewModelBinder))] 
public class ShareClassViewModel { 
相關問題