Spark.InertiaJs
0.0.2
dotnet add package Spark.InertiaJs --version 0.0.2
NuGet\Install-Package Spark.InertiaJs -Version 0.0.2
<PackageReference Include="Spark.InertiaJs" Version="0.0.2" />
paket add Spark.InertiaJs --version 0.0.2
#r "nuget: Spark.InertiaJs, 0.0.2"
// Install Spark.InertiaJs as a Cake Addin #addin nuget:?package=Spark.InertiaJs&version=0.0.2 // Install Spark.InertiaJs as a Cake Tool #tool nuget:?package=Spark.InertiaJs&version=0.0.2
Inertia.js ASP.NET Adapter
Attribution
This library is heavily inspired by Nothing-Works/inertia-aspnetcore, but it has some errors fixed and its usage is more similar to the official adapters'.
What was added
- Validation error handling.
- Better shared data integration.
- Props and shared props are merged instead of being separated.
- Server-side rendering support.
- Cycle-safe model with relations data serialization.
- Fixed PATCH, PUT, DELETE redirection not working properly.
Installation
- Using Package Manager:
PM> Install-Package AspNetCore.InertiaCore
- Using .NET CLI:
dotnet add package AspNetCore.InertiaCore
Getting started
You need to add few lines to the Program.cs
or Starup.cs
file.
using InertiaCore.Extensions;
[...]
builder.Services.AddInertia();
[...]
app.UseInertia();
Usage
Frontend
Create a file /Views/App.cshtml
.
@using InertiaCore
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title inertia>My App</title>
</head>
<body>
@await Inertia.Html(Model)
<script src="/js/app.js"></script>
</body>
</html>
You can change the root view file using:
builder.Services.AddInertia(options =>
{
options.RootView = "~/Views/Main.cshtml";
});
Backend
To pass data to a page component, use Inertia.Render()
.
public async Task<IActionResult> Index()
{
var posts = await _context.Posts.ToListAsync();
var data = new
{
Posts = posts,
};
return Inertia.Render("Posts", data);
}
To make a form endpoint, remember to add [FromBody]
to your model parameter, because the request data is passed using
JSON.
[HttpPost]
public async Task<IActionResult> Create([FromBody] Post post)
{
if (!ModelState.IsValid)
{
// The validation errors are passed automatically.
return await Index();
}
_context.Add(post);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
Features
Shared data
You can add some shared data to your views using for example middlewares:
using InertiaCore;
[...]
app.Use(async (context, next) =>
{
var userId = context.Session.GetInt32("userId");
Inertia.Share("auth", new
{
UserId = userId
});
// Or
Inertia.Share(new Dictionary<string, object?>
{
["auth"] => new
{
UserId = userId
}
});
});
Server-side rendering
If you want to enable SSR in your Inertia app, remember to add Inertia.Head()
to your layout:
@using InertiaCore
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title inertia>My App</title>
@await Inertia.Head(Model)
</head>
<body>
@await Inertia.Html(Model)
<script src="/js/app.js"></script>
</body>
</html>
and enable the SSR option:
builder.Services.AddInertia(options =>
{
options.SsrEnabled = true;
// You can optionally set a different URL than the default.
options.SsrUrl = "http://127.0.0.1:13714/render"; // default
});
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net7.0
- TypeMerger (>= 2.1.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.