C# ASP.NETMVC共享方法

C# ASP.NETMVC共享方法,c#,asp.net-mvc,methods,C#,Asp.net Mvc,Methods,我有两种方法使用不同的ViewModel,但逻辑相同。目前,我已将它们复制并粘贴到各自的控制器中。有没有办法分享这些方法 歌曲控制器: public JsonResult IncrementViews(int id) { using (ApplicationDbContext db = new ApplicationDbContext()) { PublishedSongViewModel song = db.PublishedSo

我有两种方法使用不同的ViewModel,但逻辑相同。目前,我已将它们复制并粘贴到各自的控制器中。有没有办法分享这些方法

歌曲控制器:

public JsonResult IncrementViews(int id)
    {
        using (ApplicationDbContext db = new ApplicationDbContext())
        {
            PublishedSongViewModel song = db.PublishedSongs.Single(x => x.Id == id);
            song.UniquePlayCounts++;
            db.SaveChanges();
            return Json(new { UniquePlayCounts = song.UniquePlayCounts }, JsonRequestBehavior.AllowGet);
        }
    }
public JsonResult IncrementViews(int id)
        {
            using (ApplicationDbContext db = new ApplicationDbContext())
            {
                RadioStationViewModel station = db.RadioStations.Single(x => x.Id == id);
                station.UniquePlayCounts++;
                db.SaveChanges();
                return Json(new { UniquePlayCounts = station.UniquePlayCounts }, JsonRequestBehavior.AllowGet);
            }
        }
车站调度员:

public JsonResult IncrementViews(int id)
    {
        using (ApplicationDbContext db = new ApplicationDbContext())
        {
            PublishedSongViewModel song = db.PublishedSongs.Single(x => x.Id == id);
            song.UniquePlayCounts++;
            db.SaveChanges();
            return Json(new { UniquePlayCounts = song.UniquePlayCounts }, JsonRequestBehavior.AllowGet);
        }
    }
public JsonResult IncrementViews(int id)
        {
            using (ApplicationDbContext db = new ApplicationDbContext())
            {
                RadioStationViewModel station = db.RadioStations.Single(x => x.Id == id);
                station.UniquePlayCounts++;
                db.SaveChanges();
                return Json(new { UniquePlayCounts = station.UniquePlayCounts }, JsonRequestBehavior.AllowGet);
            }
        }
编辑: 迄今为止的课程:

public static IEnumerable<Type> GetElements(ApplicationDbContext db, Type type)
    {
        if (type == typeof(SongsController))
            return (IEnumerable<Type>)db.PublishedSongs;
        else if (type == typeof(RadioStationsController))
            return (IEnumerable<Type>)db.RadioStations;
        else
            throw new Exception("Controller not found, DBHelper");
    }
公共静态IEnumerable GetElements(ApplicationDbContext数据库,类型)
{
if(type==typeof(SongsController))
返回(IEnumerable)db.PublishedSongs;
else if(type==typeof(radiostationcontroller))
返回(IEnumerable)db.RadioStations;
其他的
抛出新异常(“未找到控制器,DBHelper”);
}

创建一个名为
BasicController
的类,并将方法添加到该类中,如下所示:

public class BasicController {
    public JsonResult IncrementViews(int id)
    {
        using (ApplicationDbContext db = new ApplicationDbContext())
        {
            var element = DBHelper.GetElements(db, this.GetType()).Single(x => x.Id == id);
            element.UniquePlayCounts++;
            db.SaveChanges();
            return Json(new { UniquePlayCounts = song.UniquePlayCounts }, JsonRequestBehavior.AllowGet);
        }
    }
}
并修改类以从
BasicController
继承。您还必须使用
GetElements
方法创建
DBHelper
类,该方法根据类型从db收集
IEnumerable
元素

编辑:这是创建辅助对象的方式:

public class DBHelper {
    public static IEnumerable GetElements(ApplicationDbContext db, System.Type type) {
        if (type == typeof(SongController)) {
            return db.PublishedSongs;
        } else if (type == typeof(StationController)) {
            return db.RadioStations;
        }
    }
}

如何创建GetElements方法。我以前从来没有做过helpers,所以我不知道从哪里开始?你需要创建一个名为DBHelper的类,就像创建任何其他类一样。在其中,您需要定义GetElements,它将接收应用程序db上下文和System.Type。基于系统。键入以收集元素。您需要使用if-elses来实现此目的。@MartinMazzaDawson,请检查我的编辑。这是未经测试的代码,所以如果感觉不太正确,请添加一条未定义的注释,因此我将其更改为Type,不确定这是否正确。另外,在我的控制器中,
x.Id
this.GetType())上找不到。Single(x=>x.Id==Id)
它有GUID作为属性,但我使用的是int-Id,如果C接受它,可以不尝试。我现在没有C#的环境。第二个问题是,您试图使用类型来执行此操作。