问题描述
|
我想将实现接口的许多类之一从我的视图传递回控制器动作。我在视图中使用了一个ActionLink,将实例传递给我的动作,但由于MVC无法通过默认模型绑定处理接口,因此自然会失败。
因此:
<%=Html.ActionLink(flow.source.Name,\"Get\",new {container=flow.source})%>
处于循环中,每个流.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,并且每个实体的表上都映射有实体,例如,对于文件来说有一个,对于工作表来说有一个,因此需要能够决定使用哪个数据访问类。合理?可能不会!
是否可以在不使用基类容器的情况下完成此操作?我可以坚持将接口传递给我的操作方法,并解决代替接口传递的子类型实例吗?
任何帮助,将不胜感激。
解决方法
当调用类时,接口需要“某些”具体实现来引用。我认为从您的帖子来看,您知道这一点:)
话虽如此,这里处理的方法很“简单”,您只需创建自己的模型绑定程序,该绑定程序必须了解(或如何)映射到并创建具体类型(直接或通过依赖项注入)
ASP.NET MVC-接口类型上的自定义模型活页夹