C# ASP.NETMVC共享方法
我有两种方法使用不同的ViewModel,但逻辑相同。目前,我已将它们复制并粘贴到各自的控制器中。有没有办法分享这些方法 歌曲控制器: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
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#的环境。第二个问题是,您试图使用类型来执行此操作。