# 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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.wisej.com/docs/concepts/startup.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
