I would call BeginTransaction() directly in the controller actions, where and when you need it. You usually want the transaction to have the shorter lifespan possible. Also, this way you have the choice not to open a transaction in the cases you don't need it, like a redirection.
Also, don't forget to use
using(var transaction = Session.BeginTransaction()) { // Database code here }so your transaction is always disposed, exception or not.