Create your own BaseAction

Smartsite 7.8 - ...

When you need to create an action which is not anything like a DataEditor action, and requires a little more then simply embedding an application page, you should create a custom action which inherits from the abstract class Smartsite.Manager.BaseAction.

BaseAction

A BaseAction is the most basic type that can be used to create an action. Just implement the Execute method and build the html result as needed, see the example below.

C# CopyCode image Copy Code
using System;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Web;
using System.Xml.Linq;
 
namespace Smartsite.Manager.Actions
{
    internal class SmartsiteFeedback : BaseAction
    {
        /// <summary>
        /// Constructor
        /// </summary>
        internal SmartsiteFeedback()
        { }
 
        public override ActionResult Execute(MgrContext context)
        {
            if (HttpContext.Current.Request.Form["action"] == "close")
                return ActionResult.CloseAction();
 
            string html = FormParser.LoadForm("Smartsite.Manager.Source.Actions.SmartsiteFeedback.Center.xhtml");
            context.Response.Layout[ThreeColumnLayout.CenterColumn] = html;
  
            ButtonBar buttonBar = new ButtonBar();
            buttonBar.Buttons.Add(new Button("close", Translations.GetString("CLOSE"), "icon_sys22 icon-sys22-cancel", true));
            context.Response.Layout[ThreeColumnLayout.ButtonBar] = buttonBar.Render();
 
            return ActionResult.ActionCompleted();
        }
 
        public override string GetTabIdentifier(MgrContext context)
        {
            return "SMARTSITEFEEDBACK";
        }
    }
}

The html is loaded from an embedded resource, containing the following html:

HTML CopyCode image Copy Code
<div>
    <h2>{text:FEEDBACK_TITLE}</h2>
    <p>
        {text:FEEDBACK_DESC}
    </p>
    <button name="action" value="openform" class="btn icon_sys22 icon-sys22-ahead" style="margin-top:24px;" 
            onclick="window.open('http://www.smartsite.nl/?id=SMARTSITE-MANAGER-FEEDBACK-FORM'); return false;">{text:FEEDBACK_BTN}</button>
</div>

The FormParser.LoadForm() method will load this embedded resource and will find and replace {text:localization_string} placeholders with the correct localized string value.

When rendering a BaseAction, the ThreeColumnLayout is used by default.