То, что вы сделали, звучит разумно. Можете ли вы более конкретно рассказать о проблеме, с которой вы столкнулись?
Одна вещь о контроле мастера, поскольку ваш рабочий процесс становится все более и более сложным, я думаю, что связь между состоянием вашего рабочего процесса и мастером SelectedViewIndex становится проблематичной. По этой причине я в конечном счете разделяю их. Обычно я буду использовать шаблон состояния / состояния машины, где текущее состояние рабочего процесса используется для определения соответствующего индекса представления мастера (но не наоборот).
Если вы ищете примеры того, как реализовать конечный автомат, у меня есть тестовое приложение, которое просматривает диалоги, как элемент управления мастера, за исключением использования javascript. Извлеките http://main(dot)test.wishpot.com/WaveDataCollection.Frank/, после того, как вы попадете на страницу CollectSamples.aspx, продолжайте и просмотрите исходный код, затем начните просмотр в функции GotoState.
Конечные автоматы немного различаются в C #, главное отличие в том, что объект состояния - это абстрактный класс с фиксированным числом обработчиков событий, каждое состояние которого наследуется от этого класса, реализуя каждый обработчик (некоторые, возможно, выдают исключение). С javascript нам не нужен абстрактный класс состояний ... Кроме того, делая это на стороне сервера, вам нужно будет иметь возможность сопоставлять идентификатор состояния, хранящийся в вашей базе данных, с классом состояния.