<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><description></description><title>Adventures in .NET (and other M$ stuff)</title><generator>Tumblr (3.0; @c0s)</generator><link>http://c0s.org/</link><item><title>CruddySmartDispatcherController</title><description>&lt;p&gt;I realized most controllers (I tend to stick with a RESTful design, when possible) basically have the same actions and I wondered if a generic controller couldn’t fit the bill… so I came up with this:&lt;/p&gt;
&lt;p&gt;[DefaultAction(“index”), Layout(“default”)]&lt;br/&gt;  public class CruddySmartDispatcherController : SmartDispatcherController&lt;br/&gt;    where AR : ActiveRecordBase, IDomainObject&lt;br/&gt;  {&lt;br/&gt;    public delegate void RunInAction();&lt;br/&gt;&lt;br/&gt;    public delegate void RunAfterSingleAction(AR o);&lt;br/&gt;&lt;br/&gt;    public delegate void RunAfterMultipleAction(IEnumerable objects);&lt;br/&gt;&lt;br/&gt;    private readonly IDictionary&gt; _beforeActions;&lt;br/&gt;    private readonly IDictionary&gt; _afterActions;&lt;br/&gt;    private readonly IDictionary&gt; _afterSingleActions;&lt;br/&gt;    private readonly IDictionary&gt; _afterMultipleActions;&lt;br/&gt;&lt;br/&gt;    public CruddySmartDispatcherController()&lt;br/&gt;    {&lt;br/&gt;      _beforeActions = new Dictionary&gt;()&lt;br/&gt;                         {&lt;br/&gt;                           {“index”, new List()},&lt;br/&gt;                           {“show”, new List()},&lt;br/&gt;                           {“new”, new List()},&lt;br/&gt;                           {“create”, new List()},&lt;br/&gt;                           {“edit”, new List()},&lt;br/&gt;                           {“update”, new List()},&lt;br/&gt;                           {“delete”, new List()}&lt;br/&gt;                         };&lt;br/&gt;      _afterActions = new Dictionary&gt;()&lt;br/&gt;                        {&lt;br/&gt;                          {“index”, new List()},&lt;br/&gt;                          {“show”, new List()},&lt;br/&gt;                          {“new”, new List()},&lt;br/&gt;                          {“create”, new List()},&lt;br/&gt;                          {“edit”, new List()},&lt;br/&gt;                          {“update”, new List()},&lt;br/&gt;                          {“delete”, new List()}&lt;br/&gt;                        };&lt;br/&gt;      _afterSingleActions = new Dictionary&gt;()&lt;br/&gt;                        {&lt;br/&gt;                          {“index”, new List()},&lt;br/&gt;                          {“show”, new List()},&lt;br/&gt;                          {“new”, new List()},&lt;br/&gt;                          {“create”, new List()},&lt;br/&gt;                          {“edit”, new List()},&lt;br/&gt;                          {“update”, new List()},&lt;br/&gt;                          {“delete”, new List()}&lt;br/&gt;                        };&lt;br/&gt;      _afterMultipleActions = new Dictionary&gt;()&lt;br/&gt;                        {&lt;br/&gt;                          {“index”, new List()},&lt;br/&gt;                          {“show”, new List()},&lt;br/&gt;                          {“new”, new List()},&lt;br/&gt;                          {“create”, new List()},&lt;br/&gt;                          {“edit”, new List()},&lt;br/&gt;                          {“update”, new List()},&lt;br/&gt;                          {“delete”, new List()}&lt;br/&gt;                        };&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    public virtual void Index()&lt;br/&gt;    {&lt;br/&gt;      RunBefores(“index”);&lt;br/&gt;      IEnumerable objects = ActiveRecordBase.FindAll();&lt;br/&gt;      PropertyBag.Add(“objects”, objects);&lt;br/&gt;      RunAfters(“index”, objects);&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    public virtual void Show(int id)&lt;br/&gt;    {&lt;br/&gt;      RunBefores(“show”);&lt;br/&gt;      var o = ActiveRecordBase.FindOne(Expression.Eq(“Id”, id));&lt;br/&gt;      PropertyBag.Add(“object”, o);&lt;br/&gt;      RunAfters(“show”, o);&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    public virtual void New()&lt;br/&gt;    {&lt;br/&gt;      RunBefores(“new”);&lt;br/&gt;      RunAfters(“new”);&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    public virtual void Create([DataBind(“object”, Exclude = “id”)] AR o)&lt;br/&gt;    {&lt;br/&gt;      try&lt;br/&gt;      {&lt;br/&gt;        RunBefores(“create”);&lt;br/&gt;        o.Save();&lt;br/&gt;        PropertyBag.Add(“object”, o);&lt;br/&gt;        this.AddInfo(o.ToString() + ” created.”);&lt;br/&gt;        RunAfters(“create”, o);&lt;br/&gt;      }&lt;br/&gt;      catch (Exception ex)&lt;br/&gt;      {&lt;br/&gt;        this.AddError(ex.Message);&lt;br/&gt;        Flash.Add(“object”, o);&lt;br/&gt;        RedirectToAction(“new”);&lt;br/&gt;      }&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    public virtual void Edit(int id)&lt;br/&gt;    {&lt;br/&gt;      RunBefores(“edit”);&lt;br/&gt;      var o = ActiveRecordBase.FindOne(Expression.Eq(“Id”, id));&lt;br/&gt;      PropertyBag.Add(“object”, o);&lt;br/&gt;      RunAfters(“edit”, o);&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    public virtual void Update([DataBind(“object”)] AR o)&lt;br/&gt;    {&lt;br/&gt;      try&lt;br/&gt;      {&lt;br/&gt;        RunBefores(“update”);&lt;br/&gt;        o.Update();&lt;br/&gt;        PropertyBag.Add(“object”, o);&lt;br/&gt;        this.AddInfo(o.ToString() + ” updated.”);&lt;br/&gt;        RunAfters(“update”, o);&lt;br/&gt;      }&lt;br/&gt;      catch (Exception ex)&lt;br/&gt;      {&lt;br/&gt;        this.AddError(ex.Message);&lt;br/&gt;        Flash.Add(“object”, o);&lt;br/&gt;        RedirectToAction(“edit”, “id=” + o.Id.ToString());&lt;br/&gt;      }&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    public virtual void Delete(int id)&lt;br/&gt;    {&lt;br/&gt;      try&lt;br/&gt;      {&lt;br/&gt;        RunBefores(“delete”);&lt;br/&gt;        var o = ActiveRecordBase.FindOne(Expression.Eq(“Id”, id));&lt;br/&gt;        o.Delete();&lt;br/&gt;        this.AddInfo(o.ToString() + ” deleted.”);&lt;br/&gt;        RunAfters(“delete”, o);&lt;br/&gt;      }&lt;br/&gt;      catch (Exception ex)&lt;br/&gt;      {&lt;br/&gt;        this.AddError(ex.Message);&lt;br/&gt;        RedirectToAction(“index”);&lt;br/&gt;      }&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    protected void Before(string action, RunInAction ria)&lt;br/&gt;    {&lt;br/&gt;      Before(new string[] { action }, ria);&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    protected void After(string action, RunInAction ria)&lt;br/&gt;    {&lt;br/&gt;      After(new string[] { action }, ria);&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    protected void After(string action, RunAfterSingleAction rasa)&lt;br/&gt;    {&lt;br/&gt;      After(new string[] { action }, rasa);&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    protected void After(string[] actions, RunAfterSingleAction rasa)&lt;br/&gt;    {&lt;br/&gt;      foreach (var a in actions)&lt;br/&gt;        _afterSingleActions[a].Add(rasa);&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    protected void After(string action, RunAfterMultipleAction rasa)&lt;br/&gt;    {&lt;br/&gt;      After(new string[] { action }, rasa);&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    protected void After(string[] actions, RunAfterMultipleAction rasa)&lt;br/&gt;    {&lt;br/&gt;      foreach (var a in actions)&lt;br/&gt;        _afterMultipleActions[a].Add(rasa);&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    protected void Before(string[] actions, RunInAction ria)&lt;br/&gt;    {&lt;br/&gt;      foreach (var a in actions)&lt;br/&gt;        _beforeActions[a].Add(ria);&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    protected void After(string[] actions, RunInAction ria)&lt;br/&gt;    {&lt;br/&gt;      foreach (var a in actions)&lt;br/&gt;        _afterActions[a].Add(ria);&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    protected virtual void RunBefores(string action)&lt;br/&gt;    {&lt;br/&gt;      foreach (var ria in _beforeActions[action])&lt;br/&gt;        ria();&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    protected virtual void RunAfters(string action)&lt;br/&gt;    {&lt;br/&gt;      foreach (var ria in _afterActions[action])&lt;br/&gt;        ria();&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    protected virtual void RunAfters(string action, AR o)&lt;br/&gt;    {&lt;br/&gt;      RunAfters(action);&lt;br/&gt;      foreach (var rasa in _afterSingleActions[action])&lt;br/&gt;        rasa(o);&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    protected virtual void RunAfters(string action, IEnumerable objects)&lt;br/&gt;    {&lt;br/&gt;      RunAfters(action);&lt;br/&gt;      foreach (var rama in _afterMultipleActions[action])&lt;br/&gt;        rama(objects);&lt;br/&gt;    }&lt;br/&gt;  }&lt;/p&gt;
&lt;p&gt;This could prob be better, but it is a start. Here is a use example:&lt;/p&gt;
&lt;p&gt; public class ItemController : CruddySmartDispatcherController&lt;br/&gt;  {&lt;br/&gt;    public ItemController()&lt;br/&gt;    {&lt;br/&gt;            Before(new string[] {“new”,”edit”},PopulateDropDowns);&lt;br/&gt;&lt;br/&gt;            After(&lt;br/&gt;                new string[]{&lt;br/&gt;                    ”create”,&lt;br/&gt;                    ”delete”&lt;br/&gt;                }, delegate()&lt;br/&gt;                          {&lt;br/&gt;                                    RedirectToAction(“index”);           &lt;br/&gt;                                    CancelView();&lt;br/&gt;                          });&lt;br/&gt;            After(“update”, item =&gt; RedirectToAction(“show”, “id=” + item.Id.ToString()));&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;      private void PopulateDropDowns()&lt;br/&gt;      {&lt;br/&gt;          PropertyBag.Add(“departments”,ActiveRecordBase.FindAll());&lt;br/&gt;      }&lt;br/&gt;  }&lt;/p&gt;</description><link>http://c0s.org/post/33535358</link><guid>http://c0s.org/post/33535358</guid><pubDate>Fri, 02 May 2008 11:23:56 -0400</pubDate><category>monorail</category><category>controllers</category><category>rest</category><category>restful</category><category>crud</category><category>code</category></item><item><title>eval(jsonResponse): invalid label</title><description>eval(“(” + jsonResponse + “)”) fixed it for me.</description><link>http://c0s.org/post/28156156</link><guid>http://c0s.org/post/28156156</guid><pubDate>Thu, 06 Mar 2008 18:01:44 -0500</pubDate></item><item><title>Focus TextBox onfocus</title><description>onfocus=”this.select()”</description><link>http://c0s.org/post/26083571</link><guid>http://c0s.org/post/26083571</guid><pubDate>Mon, 11 Feb 2008 14:45:11 -0500</pubDate></item><item><title>Mock&lt;IPerson&gt;</title><description>A person who implements an interface without anything under the surface to really backup the methods they expose.</description><link>http://c0s.org/post/25617416</link><guid>http://c0s.org/post/25617416</guid><pubDate>Tue, 05 Feb 2008 21:21:00 -0500</pubDate></item><item><title>Change SQL Server Port</title><description>&lt;p&gt;SQL Server Config Manager&lt;/p&gt;
&lt;p&gt;Network Config -&gt; Protocols -&gt; Enable TCP/IP&lt;/p&gt;
&lt;p&gt;    -&gt; IP Addresses&lt;/p&gt;
&lt;p&gt;        Change each TCP Port to WHATEVER &lt;/p&gt;
&lt;p&gt;Services -&gt; Restart SQL Server&lt;/p&gt;</description><link>http://c0s.org/post/24088523</link><guid>http://c0s.org/post/24088523</guid><pubDate>Fri, 18 Jan 2008 10:53:06 -0500</pubDate></item></channel></rss>
