.NET 帮助

dotnetify.NET(如何为开发人员工作)

介绍

DotNetify 是一个使用 .NET 和 Blazor 制作的开源框架,用于在 .NET 平台上创建实时网络应用程序。 利用 SignalR 在客户端和服务器之间进行实时交互的强大功能,可以更轻松地构建动态和交互式网络应用程序。 DotNetify 是一种编程模型,它将客户端视图与服务器端脚本数据同步,使开发人员可以快速轻松地设计丰富、响应迅速且性能优越的在线界面。

相反,IronPDF PDF Generation Library 是一个强大的 .NET 包,使程序化地创建、编辑和操作 PDF 文档变得更加容易。 对于创建动态、数据驱动型文档(如报告、发票和表单)来说,这是一个不错的选择,因为它提供了直观的 API,可将 HTML 文本转换为 PDF。

通过将 DotNetify 与 IronPDF 集成,在 C# 应用程序中结合了实时网络交互性和强大的 PDF 制作功能。 需要实时显示数据并能根据最新数据动态创建和分发 PDF 文档的应用程序会发现这种集成特别有用。 开发人员可以利用 IronPDF 的多功能 PDF 生成功能和 DotNetify 的实时数据同步功能,设计广泛的交互式在线应用程序,满足复杂的业务需求,并通过无缝文档生成和分发改善用户体验。

什么是 DotNetify?

DotNetify 是一个开源框架,用于简化使用 .NET 和 Blazor 创建交互式实时 web 应用程序的过程。 开发人员可以利用 SignalR 创建动态的响应式用户界面,并毫不费力地与服务器端数据同步,从而促进客户端与服务器之间的实时通信。 DotNetify 是一种反应式编程方法,它通过抽象实时数据绑定和事件处理的困难,用少量代码简化了复杂在线应用程序的创建。

dotnetify .NET(它对开发者的工作方式):图 1

为确保用户界面始终反映应用程序的状态,DotNetify 允许开发人员在服务器上构建视图模型,并立即将更改传播到客户端。 该框架允许灵活选择客户端技术,同时支持经典 JavaScript 前端和 Blazor 前端。 由于其易用性和有效性,它非常适合需要实时更新的应用程序,如仪表盘、协作工具和实时数据流。

DotNetify 可实时处理复杂的交互和数据流,实现流畅的数据同步和即时反馈,从而大大改善用户体验。 综上所述,DotNetify 对于希望快速有效地构建反应式、前沿、实时在线应用程序的 .NET 开发人员来说,是一个非常有用的解决方案。

DotNetify 的功能

C# 中的 DotNetify 提供的一系列功能使创建交互式实时在线应用程序变得更加容易。重要特性包括

实时通信:DotNetify 使用 SignalR 来促进客户端和服务器之间的双向实时通信,从而实现交互式用户界面和快速更新。

响应式编程模型:它提供了一种响应式编程方法,其中客户端视图和服务器端视图模型自动同步,以确保用户界面始终与最新信息保持一致。

服务器端视图模型: 这使开发人员可以创建服务器端视图模型,客户端组件可以绑定到这些模型,从而简化应用程序内的状态管理和数据流动。

Blazor 和 JavaScript 支持:支持经典的 JavaScript 前端和 Blazor 前端,允许开发人员选择最符合其要求的客户端技术。

易于集成:由于它与现有.NET应用程序的无缝集成,可以轻松将实时功能添加到新项目或现有项目中。 它还能很好地与 WebSockets 等前端 UI 组件框架集成,用于创建网络组件,并与使用 React Native、Vue 和 Blazor 等软件的项目配合使用。

可扩展性:基于SignalR的DotNetify继承了其可扩展性特性,使应用程序能够有效管理大量并发连接。

MVVM 架构:支持模型-视图-视图模型(MVVM)架构,有助于职责的划分以及代码的整洁和可维护性。

事件处理:通过简化事件处理和数据绑定,减少处理UI交互和状态变化所需的样板代码量。

可扩展和可定制:提供扩展点和挂钩,允许自定义行为和与其他库或框架的必要集成。

强大的基础设施:DotNetify基础设施提供了一种动态路由机制,可以在后端完全定义,支持嵌套路由、基于令牌的身份验证等功能。

开源和社区驱动:DotNetify 是一个受益于社区参与和贡献的开源项目,确保持续升级和改进。

创建和配置 DotNetify C#

要建立一个简单的项目并开始在 C# 在线应用程序中配置 DotNetify,请按以下步骤操作。 本教程将向您展示如何使用 ASP.NET Core 和 Blazor 架设基本的 DotNetify 服务器和客户端。

设置新的 ASP.NET Core Blazor 服务器项目

  • 打开 Visual Studio:启动 Visual Studio,然后开始一个新项目。
  • 创建 Blazor 服务器应用:从项目模板中选择 Blazor 服务器应用模板后,点击“下一步”。
  • 配置您的项目:为您的项目命名(例如“DotNetifyWebApp”),并进行必要的配置更改。 按 "创建"。

通过 NuGet 安装 DotNetify

  • 管理 NuGet 包:在解决方案资源管理器中右键点击您的项目,然后选择“管理 NuGet 包”。
  • 搜索 DotNetify:安装 DotNetify 和 DotNetify.Blazor 包。

配置 DotNetify

要配置 DotNetify,请打开 Startup.cs,并使用 ConfigureServices 和 Configure 方法。

using DotNetify;
using DotNetify.Blazor;
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
        services.AddServerSideBlazor();
        services.AddSignalR();
        services.AddDotNetify();
    }
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapBlazorHub();
            endpoints.MapFallbackToPage("/_Host");
            endpoints.MapHub<DotNetifyHub>("/dotnetify");
        });
    }
}
using DotNetify;
using DotNetify.Blazor;
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
        services.AddServerSideBlazor();
        services.AddSignalR();
        services.AddDotNetify();
    }
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapBlazorHub();
            endpoints.MapFallbackToPage("/_Host");
            endpoints.MapHub<DotNetifyHub>("/dotnetify");
        });
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

创建视图模型

在您的项目中创建一个新的类文件(例如,HelloWorldViewModel.cs),并设计一个基本的视图模型。

using DotNetify;
public class HelloWorldViewModel : BaseVM
{
    public string Greetings => "Hello, World!";
}
using DotNetify;
public class HelloWorldViewModel : BaseVM
{
    public string Greetings => "Hello, World!";
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

注册 ViewModel

在注册 ViewModel 之前,请打开 Program.cs。

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }
    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            })
            .ConfigureServices(services =>
            {
                services.AddTransient<HelloWorldViewModel>();
            });
}
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }
    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            })
            .ConfigureServices(services =>
            {
                services.AddTransient<HelloWorldViewModel>();
            });
}
Imports Microsoft.AspNetCore.Hosting
Imports Microsoft.Extensions.DependencyInjection
Imports Microsoft.Extensions.Hosting
Public Class Program
	Public Shared Sub Main(ByVal args() As String)
		CreateHostBuilder(args).Build().Run()
	End Sub
	Public Shared Function CreateHostBuilder(ByVal args() As String) As IHostBuilder
		Return Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(Sub(webBuilder)
				webBuilder.UseStartup(Of Startup)()
		End Sub).ConfigureServices(Sub(services)
				services.AddTransient(Of HelloWorldViewModel)()
		End Sub})
	End Function
$vbLabelText   $csharpLabel

创建 Blazor 组件

在您的项目中,添加一个新的Blazor组件(例如HelloWorld.razor)并将其连接到ViewModel。

@page "/"
@using DotNetify
@using DotNetify.Blazor
@inject IDotNetifyService DotNetify
<h3>@greetings</h3>
@code {
    private string greetings;
    protected override async Task OnInitializedAsync()
    {
        var vm = await DotNetify.ConnectAsync<HelloWorldViewModel>(this);
        greetings = vm.Greetings;
    }
}
@page "/"
@using DotNetify
@using DotNetify.Blazor
@inject IDotNetifyService DotNetify
<h3>@greetings</h3>
@code {
    private string greetings;
    protected override async Task OnInitializedAsync()
    {
        var vm = await DotNetify.ConnectAsync<HelloWorldViewModel>(this);
        greetings = vm.Greetings;
    }
}
'INSTANT VB TODO TASK: The following line could not be converted:
page "/" [using] DotNetify [using] DotNetify.Blazor inject IDotNetifyService DotNetify (Of h3) greetings</h3> code
If True Then
	private String greetings
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'	protected override async Task OnInitializedAsync()
'	{
'		var vm = await DotNetify.ConnectAsync<HelloWorldViewModel>(Me);
'		greetings = vm.Greetings;
'	}
End If
$vbLabelText   $csharpLabel

设置应用程序以利用 DotNetify、Blazor、Razor Pages 和 SignalR。 此外,还要配置 DotNetify 和 Blazor 端点和路由。 介绍带有问候语消息返回属性的基本 ViewModel。 HelloWorldViewModel 已注册为临时服务。Blazor 组件与 HelloWorldViewModel 建立连接,获取欢迎文本并将其显示在屏幕上。

dotnetify .NET(为开发人员工作的方式):图2

入门

您必须创建一个 .NET 项目,并将这两个库纳入您的应用程序,才能使用 DotNetify 和 IronPDF。 下面是一个分步教程,让您轻松上手:

什么是IronPDF?

功能丰富的.NET库IronPDF PDF Library允许C#程序生成、读取和编辑PDF文档。 通过该程序,开发人员可以快速将 HTML、CSS 和 JavaScript 信息转化为高质量、可打印的 PDF 文件。 最关键的任务包括添加页眉和页脚、分割和合并 PDF、为文档添加水印以及将 HTML 转换为 PDF。

IronPDF 支持 .NET Framework 和 .NET Core,因此对各种应用都有帮助。 PDF 使用简单,信息丰富,开发人员可以轻松地将其集成到自己的产品中。 由于 IronPDF 可以处理复杂的数据布局和格式,因此其生成的 PDF 输出与客户的原始 HTML 文本非常相似。 IronPdf 还支持 Windows、Web 和移动环境等跨平台应用程序。

dotnetify .NET(如何为开发人员工作):图 3

IronPDF 的功能

从HTML生成PDF

将JavaScript、HTML和CSS转换为PDF。 IronPdf 支持媒体查询和响应式设计这两种当代网络标准。 它对现代网络标准的支持有助于使用 HTML 和 CSS 对 PDF 票据、报告和文档进行动态装饰。

PDF编辑

现有的 PDF 文件可以添加文本、图片和其他内容。 开发人员可以使用 IronPdf 从 PDF 文件中取出文本和图像,将众多 PDF 文件合并为一个文件,将 PDF 文件分成多个独立的文件,并包含水印、注释、页眉和页脚。

PDF转换

将多种文件格式(包括 Word、Excel 和图片文件)转换为 PDF 格式。 IronPDF 还支持将 PDF 转换为图像(PNG、JPEG 等)。

性能和可靠性

高性能和可靠性是在工业环境中所期望的设计特性。 有了 IronPdf,开发人员可以轻松管理大型文档集。

安装 IronPDF

要获得在 .NET 项目中处理 PDF 所需的工具,请安装 IronPDF for .NET 软件包。

dotnet add package IronPdf
dotnet add package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'dotnet add package IronPdf
$vbLabelText   $csharpLabel

将 DotNetify 与 IronPDF 整合

配置 DotNetify

启动配置:打开 Startup.cs,然后使用 ConfigureServices 和 Configure 方法设置 DotNetify。

using DotNetify;
using DotNetify.Blazor;
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
        services.AddServerSideBlazor();
        services.AddSignalR();
        services.AddDotNetify();
    }
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapBlazorHub();
            endpoints.MapFallbackToPage("/_Host");
            endpoints.MapHub<DotNetifyHub>("/dotnetify");
        });
    }
}
using DotNetify;
using DotNetify.Blazor;
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
        services.AddServerSideBlazor();
        services.AddSignalR();
        services.AddDotNetify();
    }
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapBlazorHub();
            endpoints.MapFallbackToPage("/_Host");
            endpoints.MapHub<DotNetifyHub>("/dotnetify");
        });
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

创建视图模型

在您的项目中,添加一个新的类文件(例如 PdfViewModel.cs),并创建一个将生成 PDF 的 ViewModel。

using DotNetify;
using IronPdf;
public class PdfViewModel : BaseVM
{
    public string PdfUrl { get; set; }
    public void GeneratePdf()
    {
        var Renderer = new ChromePdfRenderer();
        var PdfDocument = Renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>");
        var OutputPath = "wwwroot/PdfFiles/HelloWorld.pdf";
        PdfDocument.SaveAs(OutputPath);
        PdfUrl = "/PdfFiles/HelloWorld.pdf";
        Changed(nameof(PdfUrl));
    }
}
using DotNetify;
using IronPdf;
public class PdfViewModel : BaseVM
{
    public string PdfUrl { get; set; }
    public void GeneratePdf()
    {
        var Renderer = new ChromePdfRenderer();
        var PdfDocument = Renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>");
        var OutputPath = "wwwroot/PdfFiles/HelloWorld.pdf";
        PdfDocument.SaveAs(OutputPath);
        PdfUrl = "/PdfFiles/HelloWorld.pdf";
        Changed(nameof(PdfUrl));
    }
}
Imports DotNetify
Imports IronPdf
Public Class PdfViewModel
	Inherits BaseVM

	Public Property PdfUrl() As String
	Public Sub GeneratePdf()
		Dim Renderer = New ChromePdfRenderer()
		Dim PdfDocument = Renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>")
		Dim OutputPath = "wwwroot/PdfFiles/HelloWorld.pdf"
		PdfDocument.SaveAs(OutputPath)
		PdfUrl = "/PdfFiles/HelloWorld.pdf"
		Changed(NameOf(PdfUrl))
	End Sub
End Class
$vbLabelText   $csharpLabel

将一个新的 Blazor 组件添加到您的项目(例如 GeneratePdf.razor),并将其绑定到 ViewModel 以创建一个 Blazor 组件。

@page "/"
@using DotNetify
@using DotNetify.Blazor
@inject IDotNetifyService DotNetify
<PageTitle>Generate PDF</PageTitle>
<h3>Generate PDF</h3>
<button @onclick="GeneratePdf">Generate PDF</button>
@if (!string.IsNullOrEmpty(pdfUrl))
{
    <a href="@pdfUrl" target="_blank">Download PDF</a>
}
@code {
    private string pdfUrl;
    protected override async Task OnInitializedAsync()
    {
        var vm = await DotNetify.ConnectAsync<PdfViewModel>(this);
        pdfUrl = vm.PdfUrl;
        vm.PropertyChanged += (sender, args) =>
        {
            if (args.PropertyName == nameof(vm.PdfUrl))
            {
                pdfUrl = vm.PdfUrl;
                StateHasChanged();
            }
        };
    }
    private void GeneratePdf()
    {
        DotNetify.CallMethod("GeneratePdf");
    }
}
@page "/"
@using DotNetify
@using DotNetify.Blazor
@inject IDotNetifyService DotNetify
<PageTitle>Generate PDF</PageTitle>
<h3>Generate PDF</h3>
<button @onclick="GeneratePdf">Generate PDF</button>
@if (!string.IsNullOrEmpty(pdfUrl))
{
    <a href="@pdfUrl" target="_blank">Download PDF</a>
}
@code {
    private string pdfUrl;
    protected override async Task OnInitializedAsync()
    {
        var vm = await DotNetify.ConnectAsync<PdfViewModel>(this);
        pdfUrl = vm.PdfUrl;
        vm.PropertyChanged += (sender, args) =>
        {
            if (args.PropertyName == nameof(vm.PdfUrl))
            {
                pdfUrl = vm.PdfUrl;
                StateHasChanged();
            }
        };
    }
    private void GeneratePdf()
    {
        DotNetify.CallMethod("GeneratePdf");
    }
}
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'@page "/" @using DotNetify @using DotNetify.Blazor @inject IDotNetifyService DotNetify (Of PageTitle) Generate PDF</PageTitle> (Of h3) Generate PDF</h3> <button @onclick="GeneratePdf"> Generate PDF</button> @if(!string.IsNullOrEmpty(pdfUrl))
'{
'	<a href="@pdfUrl" target="_blank"> Download PDF</a>
'}
code
If True Then
	private String pdfUrl
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'	protected override async Task OnInitializedAsync()
'	{
'		var vm = await DotNetify.ConnectAsync<PdfViewModel>(Me);
'		pdfUrl = vm.PdfUrl;
'		vm.PropertyChanged += (sender, args) =>
'		{
'			if (args.PropertyName == nameof(vm.PdfUrl))
'			{
'				pdfUrl = vm.PdfUrl;
'				StateHasChanged();
'			}
'		};
'	}
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'	private void GeneratePdf()
'	{
'		DotNetify.CallMethod("GeneratePdf");
'	}
End If
$vbLabelText   $csharpLabel

通过在 C# ASP.NET Core Blazor 应用程序中集成 DotNetify 和 IronPDF,实现了实时数据处理和动态 PDF 制作。 要启用服务器端 Blazor 和实时功能,设置的第一步是在 Startup.cs 中配置项目,在其中注册 Razor Pages、Blazor Server、SignalR 和 DotNetify 的服务。

IronPdf 的 PDF 生成逻辑定义在 PdfViewModel.cs 视图模型中。 只需几行代码就足以生成 PDF 文件。其功能之一是 GeneratePdf 函数,该函数可获取 HTML 信息并将其转化为 PDF。 它将文件存储在服务器上,并更新 PdfUrl 属性,让客户端知道新文件在哪里。 该 ViewModel 与 GeneratePdf.razor Blazor 组件通信。

dotnetify .NET(它是如何为开发人员工作的):图4

为了使客户端能够调用 GeneratePdf 函数并对属性变化做出反应,它通过 IDotNetifyService 连接到 PdfViewModel 并绑定其属性。 当用户点击“Generate PDF”按钮时,组件会调用ViewModel的方法,创建PDF并动态更新下载URL。 通过这种配置,该网络应用程序将 IronPDF 强大的文档生成功能与 DotNetify 的实时数据同步功能整合在一起,从而提供了反应灵敏、引人入胜的用户体验。

dotnetify .NET(它如何为开发者工作):图 5

结论

通过将 DotNetify 与 IronPDF 集成,在 C# ASP.NET Core Blazor 应用程序中结合了实时数据同步和动态 PDF 制作。 DotNetify 可实现客户端 Blazor 组件与服务器端 ViewModels 之间的顺畅通信,从而使交互式和响应式应用程序成为可能。 IronPdf 提供了功能强大的工具,可直接从服务器端逻辑创建和修改 PDF,从而增强了上述功能。 在这种有效组合的帮助下,开发人员可以创建能够创建和发送独特文档以及实时更新的应用程序。

这种集成充分利用了实时数据处理和文档生成技术,以改善用户体验,无论是用于报告、开具发票还是任何其他与文档相关的操作。 开发人员可以按照所列步骤快速、轻松地设置和使用这些工具,这为当代网络应用程序开发开辟了广阔的天地。

对于希望尝试丰富功能集的开发者,您可以利用IronPDF和Iron Software Developer Tools进行OCR、条形码扫描、PDF制作、Excel连接以及更多功能。

如果能详细说明与项目相关的许可证备选方案,开发人员就能更轻松地选择最佳模式。 上述优势有助于开发人员针对各种问题及时、协调、有效地实施解决方案。

Chipego
软件工程师
Chipego 拥有出色的倾听技巧,这帮助他理解客户问题并提供智能解决方案。他在 2023 年加入 Iron Software 团队,此前他获得了信息技术学士学位。IronPDF 和 IronOCR 是 Chipego 主要专注的两个产品,但他对所有产品的了解每天都在增长,因为他不断找到支持客户的新方法。他喜欢 Iron Software 的合作氛围,公司各地的团队成员贡献他们丰富的经验,以提供有效的创新解决方案。当 Chipego 离开办公桌时,你经常可以发现他在看书或踢足球。
< 前一页
Grapevine .NET(它是如何为开发人员工作的)
下一步 >
FiddlerCore .NET(它对开发人员的工作方式)