Edu*_*pez 3 c# asp.net-mvc inheritance asp.net-mvc-routing
假设我有一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
当我想向Client/Details/xxxxx发出请求时,问题就出现了。浏览器显示错误
“......用户......详细信息和客户......详细信息之间的操作不明确”
如果我清空客户端类并直接在浏览器上调用 Client/Details/xxxx ,浏览器会显示以下错误:
“未找到视图‘详细信息’或其主视图,或者没有视图引擎支持搜索的位置”
如何让我的 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);
}
}
Run Code Online (Sandbox Code Playgroud)
您必须将基类方法设为虚拟才能被派生类覆盖。
Now http://<<your host>>/User/Index Call UserController method.
Now http://<<your host>>/Client/Index Call ClientController method.
Run Code Online (Sandbox Code Playgroud)
更新1
如果您想使用基类方法,则不要在派生类中实现相同的方法。保持基类方法为公共或公共虚拟。
public class UserController : Controller
{
public ActionResult Details(string id)
{
return Json("Test", JsonRequestBehavior.AllowGet);
}
}
public class ClientController : UserController
{
}
Run Code Online (Sandbox Code Playgroud)