Castle.MonoRail.ActiveRecordScaffold.UpdateAction.PerformActionProcess C# (CSharp) Method

PerformActionProcess() protected method

protected PerformActionProcess ( Controller controller ) : void
controller Castle.MonoRail.Framework.Controller
return void
		protected override void PerformActionProcess(Controller controller)
		{
			object instance = null;
			
			try
			{
				AssertIsPost(controller);
				
				instance = binder.BindObject(Model.Type, Model.Type.Name, builder.BuildSourceNode(controller.Request.Form));

				CommonOperationUtils.SaveInstance(instance, controller, errors, ref prop2Validation, false);

				SessionScope.Current.Flush();
				
				if (UseModelName)
				{
					controller.Redirect(controller.AreaName, controller.Name, "list" + Model.Type.Name);
				}
				else
				{
					controller.Redirect(controller.AreaName, controller.Name, "list");
				}
			}
			catch(Exception ex)
			{
				errors.Add("Could not save " + Model.Type.Name + ". " + ex.Message);
			}

			if (errors.Count != 0)
			{
				controller.Context.Flash[Model.Type.Name] = instance;
				controller.Context.Flash["errors"] = errors;

				PropertyInfo keyProp = ObtainPKProperty();
				IDictionary props = new Hashtable();

				if (instance != null)
				{
					props[keyProp.Name] = keyProp.GetValue(instance, null);
				}
				
				if (UseModelName)
				{
					controller.Redirect(controller.AreaName, controller.Name, "edit" + Model.Type.Name, props);
				}
				else
				{
					controller.Redirect(controller.AreaName, controller.Name, "edit", props);
				}
			}
		}