我在制作通用 Controller 时遇到了问题。我有模型,id 属性可以是字符串或 int 类型。当我想编辑一个 id 为 int 的模型时,我找不到导致错误的操作,因为我实现了 public abstract ActionResult Edit(string id) 的覆盖方法。
是否存在一种传递通用参数(字符串或整数)的方法,我的路由可以理解?
public abstract class BaseController<T> : Controller
{
//protected UnitOfWork unitOfWork = new UnitOfWork(System.Web.HttpContext.Current.User.Identity.Name);
protected UnitOfWork unitOfWork = new UnitOfWork("");
public abstract ActionResult List();
public abstract ActionResult Index();
public abstract ActionResult Details(string id);,
public abstract ActionResult CreateByModal();
public abstract ActionResult Create();
[HttpPost]
[ValidateAntiForgeryToken]
public abstract ActionResult Create(T entity);
public abstract ActionResult Edit(string id);
[HttpPost]
[ValidateAntiForgeryToken]
public abstract ActionResult Edit(T entity);
public abstract ActionResult Delete(string id);
protected override void Dispose(bool disposing)
{
//db.Dispose();
base.Dispose(disposing);
}
}
public class ModeloController : BaseController<Modelo>
{
public override ActionResult Edit(string id)
{
//Here i have a int Id im my Model and the error in my route
Modelo modelo = unitOfWork.ModeloRepository.Find(id);
if (modelo == null)
{
return HttpNotFound();
}
return PartialView("_Edit", modelo);
}
}
public class GeneroController : BaseController<Genero>
{
//Here i have a string Id im my Model
public override ActionResult Edit(string id)
{
Genero genero = unitOfWork.GeneroRepository.Find(id);
if (genero == null)
{
return HttpNotFound();
}
return PartialView("_Edit", genero);
}
最佳答案
一个选择是重载每个以 id
作为参数的方法:
public abstract ActionResult Details(string id);
public abstract ActionResult Details(int id);
或者为 id
类型添加第二个通用参数:
public abstract class BaseController<T, U> : Controller
{
public abstract ActionResult Details(U id);
public abstract ActionResult Edit(U id);
无论哪种方式,您都让调用者承担更多责任,以确保使用正确的类型。
关于c# - 如何在 asp.net mvc4 中制作具有通用参数的通用基础 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30349927/