比方说,我有一个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);
}
}
当我想向 Client / Details / xxxxx 请求时,问题就来了。浏览器显示
错误“ ...用户...详细信息和客户端...详细信息之间的动作不明确”
如果我清空客户端类并直接在浏览器Client / Details / xxxx上调用,浏览器将显示以下错误:
“找不到“详细信息”视图或其主视图,或者没有视图引擎支持搜索到的位置”
如何使我的Web应用程序将 Client / Details / xxxx 请求用作 User / Details / xxxx ,而无需在Clients类中创建代码。
答案 0 :(得分:3)
您必须遵循与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
{
}