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>
我有一个 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>