# Startup

Wisej.NET applications typically have a single application in the broad sense. For clarity:

* "Sub-application" refers to an application in the strict sense
* Each Wisej.NET project requires at least one default sub-application

## Startup Files

A new Wisej.NET project creates three startup files:

* `Default.html`
* `Default.json`
* `Program.cs`

`Default.html` maintains ASP.NET convention for startup pages.

`Program.cs` contains the `static` (`Shared` in VB) `Main` method.

The `.html` and `.json` filenames should match for simplicity but this isn't required.

{% hint style="info" %}
You can:

* Rename Default.html and Default.json
* Use .aspx files for pre-load .NET code execution (see [Wisej.UserData](https://docs.wisej.com/docs/controls/general/application#userdata))
  {% endhint %}

## Sub-Applications

### Creating

Create sub-applications in the project's root or any project folder:

1. Right-click project/folder → **Add → New Item**
2. Select **Wisej** on left side
3. Click **Application** in list
4. Set application **Name**
5. Click **Add**

Example with name "Admin" creates:

* `Admin.html`
* `Admin.json`
* `Admin.cs`

The `Admin.cs` file mirrors `Program.cs`:

{% tabs %}
{% tab title="C#" %}

```csharp
static class Admin
{
		/// <summary>
		/// The main entry point for the application.
		/// </summary>
    static void Main()
    {
    }
}
```

{% endtab %}

{% tab title="VB.NET" %}

```visual-basic
Public Module Program

	''' <summary>
	''' The main entry point for the application.
	''' </summary>
	Public Sub Main()
	End Sub
	
End Moule
```

{% endtab %}
{% endtabs %}

### Running

Wisej.NET sub-applications start with the `.json` file, not the `.html` file. Even when accessing a URL with `.html`, Wisej.NET looks for the corresponding `.json` file (rules explained below).

For the "Admin" example, `Admin.json` contains:

{% tabs %}
{% tab title="JSON" %}

```javascript
{
	"url": "Admin.html",
	"startup": "[ProjectName].Admin.Main, [ProjectName]"
}
```

{% endtab %}
{% endtabs %}

This file provides two key pieces of information:

* `url` - Which `.html` file to display in browser
* `startup` - Which server-side method to execute

When accessing `http://myApp.com/Admin`, Wisej.NET:

1. Locates `Admin.json`
2. Reads the `url` key and loads `Admin.html`
3. Invokes the startup method specified in `Admin.json`

{% hint style="info" %}

* Browsers require an HTML-like file
* Wisej.NET requires browser to load/execute `wisej.wx`
* Instead of startup method, you can specify sub-application's main view (details below)
  {% endhint %}

## Entry Point

Wisej.NET needs the server-side startup method - in this case `[ProjectName].Project.Main` in assembly `[ProjectName]`.

To instantiate an `AdminPage` instead of executing `Main`, modify `Default.json`:

{% tabs %}
{% tab title="JSON" %}

```javascript
{
    "url": "Default.html",
    "mainWindow": "[ProjectName].AdminPage, [ProjectName]"
}
```

{% endtab %}
{% endtabs %}

## Startup Workflow

The Wisej.NET startup process follows these steps:

1. Locate `.json` file
2. Direct browser to load/display the `url` HTML file
3. Execute server-side action based on `.json` file:
   * Run the `startup` method, or
   * Instantiate the `mainWindow` view

{% hint style="info" %}
Specifying both `startup` and `mainWindow` properties causes Wisej.NET to execute both.
{% endhint %}

## Rules for Finding the .json File

1. **Replace Extension with .json**
   * For URLs ending with an extension (e.g., `http://myserver.com/Startup.php`)
   * Wisej.NET looks for matching `.json` file (`\Startup.json`)
   * If `.json` not found and Wisej.NET loaded, `wisej.wx` reloads current page
2. **Append Default.json to Folder Path**
   * For folder URLs:
     * Root folder (`http://myserver.com`) → `\Default.json`
     * Folder path (`http://myserver.com/Suppliers/`) → `\Suppliers\Default.json`
3. **Handle URLs Without Extensions**
   * For URLs like `http://myserver.com/Customers`, Wisej.NET:
     1. Tries `\Customers.json`
     2. If not found, treats "Customers" as folder and tries `\Customers\Default.json`

## Default Document Configuration

The `Web.config` file in Wisej.NET project templates includes:

```markup
<defaultDocument enabled="true">
   <files>
       <add value="Default.html" />
   </files>
</defaultDocument>
```

This `defaultDocument` setting isn't required because:

* Website root URLs are treated as folder paths
* Wisej.NET automatically looks for `\Default.json` in the project root
* Rule 2 above handles folder path resolution
