Blazor 服务器端 - 从控制面板修改模型值

Blazor Server side - Modify model values from a control panel

我有一个 Blazor 计算器,它使用一些输入将它们与一些系统变量进行比较并显示结果。

我使用了一个同时具有输入变量和系统变量的模型:

(示例)

我获取并绑定的输入变量使用:

<InputText style="width: 100%" @bind-Value="model.vrefavg" class="form-control">
</InputText>

public double vrefavg { get; set; }

系统变量然后我与输入进行比较:

if (model.vrefavg > model.dieselgasoilcf) {
model.Final=2000;
}

public double Dieselgasoilcf { get; set; } = 3.206;
public double lightfueloilcf { get; set; } = 3.151;
public double heavyfueloilcf { get; set; } = 3.114;

此系统变量将需要在未来几年内更改,因此我希望能够通过我创建的登录-> 管理面板页面更改它们,而无需编辑源代码并重新上传。

我注意到我只能在索引页面上使用@bind-value,而且我假设即使我解决了这个问题,每次应用程序重新加载时,系统变量都将设置为我的初始值型号。

关于如何做到这一点有什么想法吗?

请注意,有史以来第一个应用程序。

如果您要在页面中放置类似这样的内容:

protected override async Task OnInitializedAsync()
{
    if(!File.Exists("fuels.txt"))
      File.WriteAllText("fuels.txt", "3.206\r\n3.151\r\n3.114");

    var f = await File.ReadAllLinesAsync("fuels.txt");
    Dieselgasoilcf = double.Parse(f[0]);
    Lightfueloilcf = double.Parse(f[1]);
    Heavyfueloilcf = double.Parse(f[2]);
}

..然后当页面初始化时,文件将被读取,前 3 行(因此文件将是 3.206\r\n3.151\r\n3.114)将用于给页面变量赋值

大概某个地方的另一个页面会设置值并写入一个新文件..

该文件只是一个例子;数据库也是典型的,但我想要一些快速简单的东西来演示这一点——这与文件本身无关,而是关于你将数据存储在某个地方的概念,而不是嵌入到应用程序的代码中,你从那个地方,并将它分配给你的 in-app 变量,你使用它们,也许你有一些更新文件的进程,应用程序退出,应用程序明天再次加载,数据被记住..

该数据可以在应用程序之外的任何有意义的地方;环境变量、API 调用、文件、数据库..

您可以使用项目 appsettings.json 获取此类信息。您无法通过“控制面板”更新这些值,但您可以对站点配置文件进行简单的更改。如果您想要某种控制面板,那么您需要将数据保存在数据存储区(某处的数据库或文件)中。

如果你想使用它,这里是应用程序设置设置:

appsettings.json 添加一个部分

{
  "FuelCoefficients": {
    "Dieselgasoilcf": 3.206,
    "Lightfueloilcf": 3.151,
    "Heavyfueloilcf": 3.114
  },

  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

创建一个class将数据读入:

public class FuelCoefficients
{
    public const string SectionName = "FuelCoefficients";

    public double Dieselgasoilcf { get; set; }
    public double Lightfueloilcf { get; set; }
    public double Heavyfueloilcf { get; set; }
}

Program 添加一个部分以加载数据

builder.Services.Configure<FuelCoefficients>(builder.Configuration.GetSection(FuelCoefficients.SectionName));

像这样通过依赖注入在应用程序的任何地方使用它:

@page "/"
@using Microsoft.Extensions.Options
@inject IOptions<FuelCoefficients> fuelCoefficients

<PageTitle>Index</PageTitle>

<div>
    Diesel Value: @this.fuelCoefficients.Value.Dieselgasoilcf<br />
    Light Value: @this.fuelCoefficients.Value.Lightfueloilcf<br />
    Heavy Value: @this.fuelCoefficients.Value.Heavyfueloilcf<br />
</div>