2011-04-14 54 views
2

我想通過實現從我的視圖界面回到我的控制器行動的許多類之一。我在我的視圖中使用ActionLink將實例傳遞給我的動作,但它自然失敗,因爲MVC無法通過默認模型綁定處理接口。MVC - 界面作爲控制器動作參數

所以:

<%=Html.ActionLink(flow.Source.Name, "Get", new {container=flow.Source})%> 

是一個循環,並且每個flow.Source符合的IContainer。

public class Flow 
{ 
    public virtual IContainer Source { get; private set; } 
} 

public interface IContainer 
{ 
//members here 
} 

public class File : IContainer 
{} 

public class Worksheet : IContainer 
{} 

基本上我想調用的操作方法:

public ActionResult Get(IContainer container) 
{ 
    // Do something 
} 

原因是,我需要檢索傳遞給從數據庫我的操作方法當前容器的狀態。我使用NHibernate,並且每個實體都有一個映射在表上的實體,所以有一個用於File,另一個用於Worksheet,因此需要能夠決定使用哪個數據訪問類。合理?可能不會!

這樣做可以不移向基類Container嗎?我可以堅持一個接口傳遞給我的操作方法,並解決代替接口傳遞的子類型實例嗎?

任何與此有關的幫助將不勝感激。

回答

1

當你打電話給你的班級時,一個接口需要「一些」具體實現來引用。我認爲根據你的帖子判斷你是知道這個的:) 有了這樣的說法,在這裏你可以創建你自己的模型綁定器來了解(或如何)映射到並創建一個方法具體類型(直接或依賴注入)

ASP.NET MVC - Custom Model Binder on Interface Type

相關問題