我想传递一些实现接口的类,从我的视图回到我的控制器动作。我在视图中使用ActionLink将实例传递给我的操作,但它自然会失败,因为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
}
原因是我需要从数据库中检索传递给我的action方法的当前容器的状态。我使用NHibernate并在每个实体的表上映射实体,因此有一个用于File,一个用于Worksheet,因此需要能够决定使用哪个数据访问类。合理?可能不是!
这可以在不移动基类Container的情况下完成吗?我可以坚持使用传递给我的action方法的接口并解析代替接口传递的子类型实例吗?
如有任何帮助,将不胜感激。
当你打电话给你的班级时,一个界面需要“一些”具体的实现来引用。我认为通过你的帖子来判断你知道这一点:)说到这里有一种方法,你只需创建自己的模型绑定器,它必须知道(或如何)映射到并创建一个具体的类型(直接或通过依赖注入)