MVC - 作为Controller Action参数的接口

问题描述 投票:2回答:1

我想传递一些实现接口的类,从我的视图回到我的控制器动作。我在视图中使用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方法的接口并解析代替接口传递的子类型实例吗?

如有任何帮助,将不胜感激。

model-view-controller interface methods parameters action
1个回答
1
投票

当你打电话给你的班级时,一个界面需要“一些”具体的实现来引用。我认为通过你的帖子来判断你知道这一点:)说到这里有一种方法,你只需创建自己的模型绑定器,它必须知道(或如何)映射到并创建一个具体的类型(直接或通过依赖注入)

ASP.NET MVC - Custom Model Binder on Interface Type

© www.soinside.com 2019 - 2024. All rights reserved.