c# - 如何在 asp.net mvc4 中制作具有通用参数的通用基础 Controller

标签 c# asp.net-mvc-4

我在制作通用 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/

相关文章:

c# - Regex或Linq在c#中捕获键值对

c# - 如何在 Selenium 中获取脚本标签的内容

asp.net-mvc - 系统不支持异常: Specified method is not supported

asp.net-mvc-4 - 我可以按特定顺序将两个 bundle 合并在一起,例如将两个 bundle 连接起来并为其生成一个 bundle 吗?

c# - 如何在 MVC 4 中触发按钮单击

c# - 在发现 'EntityFrameworkConfiguration' 类型之前使用了默认的 DbConfiguration 实例

c# - 如何从 HttpActionResult Ok 方法(Web Api)获取对象?

c# - 如何将 ViewModel 属性绑定(bind)到转换器中的依赖属性

asp.net-mvc-4 - RAZOR 中的表单输入语法

c# - 排除/包含导航属性