asp.net mvc contrôleur générique
je pense mettre en œuvre un contrôleur Générique En ASP.NET MVC.
PlatformObjectController<T>
où T est un objet de plate-forme (généré).
est-ce possible? Existe-t-il de l'expérience ou de la documentation?
une question connexe, par exemple, est de savoir comment sont les URLs résultantes.
12
demandé sur
Frank Michael Kraft
2010-08-05 14:01:13
1 réponses
oui, il est, vous ne pouvez pas l'utiliser directement, mais vous pouvez également la possession et l'utilisation de la childs
en voici un que j'utilise:
public class Cruder<TEntity, TInput> : Controller
where TInput : new()
where TEntity : new()
{
protected readonly IRepo<TEntity> repo;
private readonly IBuilder<TEntity, TInput> builder;
public Cruder(IRepo<TEntity> repo, IBuilder<TEntity, TInput> builder)
{
this.repo = repo;
this.builder = builder;
}
public virtual ActionResult Index(int? page)
{
return View(repo.GetPageable(page ?? 1, 5));
}
public ActionResult Create()
{
return View(builder.BuildInput(new TEntity()));
}
[HttpPost]
public ActionResult Create(TInput o)
{
if (!ModelState.IsValid)
return View(o);
repo.Insert(builder.BuilEntity(o));
return RedirectToAction("index");
}
}
et usages:
public class FieldController : Cruder<Field,FieldInput>
{
public FieldController(IRepo<Field> repo, IBuilder<Field, FieldInput> builder)
: base(repo, builder)
{
}
}
public class MeasureController : Cruder<Measure, MeasureInput>
{
public MeasureController(IRepo<Measure> repo, IBuilder<Measure, MeasureInput> builder) : base(repo, builder)
{
}
}
public class DistrictController : Cruder<District, DistrictInput>
{
public DistrictController(IRepo<District> repo, IBuilder<District, DistrictInput> builder) : base(repo, builder)
{
}
}
public class PerfecterController : Cruder<Perfecter, PerfecterInput>
{
public PerfecterController(IRepo<Perfecter> repo, IBuilder<Perfecter, PerfecterInput> builder) : base(repo, builder)
{
}
}
le code est ici: http://code.google.com/p/asms-md/source/browse/trunk/WebUI/Controllers/FieldController.cs
mise à jour:
en utilisant cette approche ici maintenant: http://prodinner.codeplex.com
19
répondu
Omu
2012-08-18 13:00:34