Подход лучше описан Филом Хааком.
В основном это то, что вы делаете:
public class AddActionParameterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
// Create integer parameter.
filterContext.ActionParameters["number"] = 123;
// Create object parameter.
filterContext.ActionParameters["person"] = new Person("John", "Smith");
}
}
Единственная ошибка в том, что если вы создаете параметры объекта, то ваш класс (в данном случае Person) должен иметь конструктор по умолчанию, иначе вы получите исключение.
Вот как бы вы использовали вышеупомянутый фильтр:
[AddActionParameter]
public ActionResult Index(int number, Person person)
{
// Now you can use number and person variables.
return View();
}