C# 如何在mvc.net上使用基本控制器的操作而不使用“操作不明确”?

C# 如何在mvc.net上使用基本控制器的操作而不使用“操作不明确”?,c#,asp.net-mvc,inheritance,asp.net-mvc-routing,C#,Asp.net Mvc,Inheritance,Asp.net Mvc Routing,假设我有一个带有Detailsstring id操作的UserController 我想创建一个名为ClientController的新类,它继承自UserController 当我想向客户/Details/xxxxx发出请求时,问题就出现了。浏览器会显示错误信息 行动在…之间模棱两可。。。用户…详细信息和客户端…详细信息 如果我清空Client类并直接在浏览器Client/Details/xxxx上调用,浏览器将显示以下错误: 未找到视图“详细信息”或其主视图,或者没有视图引擎支持搜索的位置

假设我有一个带有Detailsstring id操作的UserController

我想创建一个名为ClientController的新类,它继承自UserController

当我想向客户/Details/xxxxx发出请求时,问题就出现了。浏览器会显示错误信息

行动在…之间模棱两可。。。用户…详细信息和客户端…详细信息

如果我清空Client类并直接在浏览器Client/Details/xxxx上调用,浏览器将显示以下错误:

未找到视图“详细信息”或其主视图,或者没有视图引擎支持搜索的位置


如何使我的web应用程序以用户/Details/xxxx的身份使用Client/Details/xxxx请求,而不在Clients类中创建代码。

您必须遵循与C相关的基本OOPS

public class UserController : Controller
{
    // GET: User
    public virtual ActionResult Index()
    {
        return Json("User Controller", JsonRequestBehavior.AllowGet);
    }
}

public class ClientController : UserController
{
    // GET: User
    public override ActionResult Index()
    {
        return Json("Client Controller", JsonRequestBehavior.AllowGet);
    }
}
您必须使基类方法为虚拟的,才能由派生类重写

Now http://<<your host>>/User/Index Call UserController method.
Now http://<<your host>>/Client/Index Call ClientController method.
在这种情况下,对于/Client/Details/1或/User/Details/1,它将调用UserController内部的方法。 确保已从控制器继承UserController。 若您想在派生类中实现不同版本的方法,那个么必须使该方法成为虚拟的。
显示路由配置,还包括示例操作定义。我使用默认路由配置。我相信创建一个抽象的基类可以解决此问题。new实际上并没有重写方法,它只是防止出现隐藏方法的警告。谢谢,但我的问题更多的是关于如何使用调用子类上的请求时使用基类。Client/Details/xxx应调用baseclass User/Details/xxx此答案回答了如何使用相同操作的问题。我对问题进行了编辑,使其更直接地阐述了这个想法。谢谢你的帮助
Now http://<<your host>>/User/Index Call UserController method.
Now http://<<your host>>/Client/Index Call ClientController method.
public class UserController : Controller
    {
        public ActionResult Details(string id)
        {
            return Json("Test", JsonRequestBehavior.AllowGet);
        }
    }

    public class ClientController : UserController
    {

    }