假设我有一个UserController和一个Details(string id)动作。

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

public class ClientController : UserController
{

}

public class UserController
{
    public ActionResult Details(string id)
    {
        var user = userService.GetById(id);
        return View(user);
    }
}


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


  “ ...用户...详细信息和客户端...详细信息之间的动作不明确”


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


  “找不到视图'Details'或其主视图,或者没有视图引擎支持搜索到的位置”


如何使我的Web应用程序将Client / Details / xxxx请求用作User / 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);
    }
}


您必须将基类方法设置为Virtual才能被派生类覆盖。

Now http://<<your host>>/User/Index Call UserController method.
Now http://<<your host>>/Client/Index Call ClientController method.


更新1

如果要使用基类方法,则不要在派生类中实现相同的方法。使基类方法保持公共或公共虚拟状态。

public class UserController : Controller
    {
        public ActionResult Details(string id)
        {
            return Json("Test", JsonRequestBehavior.AllowGet);
        }
    }

    public class ClientController : UserController
    {

    }



在这种情况下,对于/ Client / Details / 1或/ User / Details / 1,它将调用Inside UserController方法。
确保您已从Controller继承了UserController。
如果要在派生类中实现方法的不同版本,则必须使该方法成为虚拟方法。

关于c# - 如何在mvc .net上使用基本 Controller 中的 Action 而不会出现“ Action 不明确”的情况?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51461350/

10-13 03:14