Asp.net Core Razor 在重载时将数据保存在视图中
Asp.net Core Razor persist data in a view over reload
在我的 Razor 应用程序中,我可以添加下面的详细信息和 return 列表中的结果,以及面积和成本。
我如何保留该结果列表以保存多个结果?
我将结果发布为
<form method="post">
并将地毯class用作
[BindProperty(SupportsGet = true)]
public Carpet? carpet { get; set; }
我的 OnPostAsync 是
public async Task<IActionResult> OnPostAsync()
{
if (ModelState.IsValid)
{
some code....
carpet.FinalCost = carpetOperations.TotalInstallCost(carpet);
carpet.Results.Add("Room area " + carpet.RoomArea + "sqm $" + carpet.FinalCost);
}
return Page();
}
但我想将数据保存在 carpet.Results 列表中的不同条目中。
我也试过 属性
public List<string> CarpetResults { get; set; }
并在构造函数中实例化它
public IndexModel(ILogger<IndexModel> logger)
{
_logger = logger;
CarpetResults = new List<string>();
}
但每次页面加载后它仍会重置。
我建议你使用数据库来实现这个,每次页面加载。它从数据库中读取数据,所以它不会在每次页面加载后重置。
因为你没有提供足够的代码,所以我只能写一个简单的demo来展示。
//I use this simple class to create the database
public class Carpet
{
public int Id { get; set; }
public int Area { get; set; }
public int Cost { get; set; }
//this property will save the "Room area xx sqm $ xx"
public string Text { get; set; }
}
然后在PageModel
//this property will show results in page
[BindProperty]
public List<Carpet> carpets { get; set; }
//this property will pass data from page to controller
[BindProperty]
public Carpet carpet { get; set; }
public IActionResult OnGet()
{
carpets = _context.carpets.ToList();
return Page();
}
public async Task<IActionResult> OnPostAsync(Carpet carpet)
{
if (ModelState.IsValid)
{
//........your code
carpet.Text = "Room area " + carpet.Area + "sqm $" + carpet.Cost;
_context.carpets.Add(carpet);
}
return Page();
}
在页面中,您可以使用@foreach(xx)
获取List<Carpet>
中的项目,然后在页面上显示它们
@*your page code*@
<h1>results</h1>
@foreach (var item in @Model.carpets)
{
<div>
<h5>@item.Area</h5>
<h5>@item.Cost</h5>
<h5>@item.Text</h5>
</div>
}
我只是写了一个简单的demo,你可能需要加上你的css和js。也可以使用session来实现,
不过我觉得还是用数据库比较方便。
在我的 Razor 应用程序中,我可以添加下面的详细信息和 return 列表中的结果,以及面积和成本。 我如何保留该结果列表以保存多个结果?
我将结果发布为
<form method="post">
并将地毯class用作
[BindProperty(SupportsGet = true)]
public Carpet? carpet { get; set; }
我的 OnPostAsync 是
public async Task<IActionResult> OnPostAsync()
{
if (ModelState.IsValid)
{
some code....
carpet.FinalCost = carpetOperations.TotalInstallCost(carpet);
carpet.Results.Add("Room area " + carpet.RoomArea + "sqm $" + carpet.FinalCost);
}
return Page();
}
但我想将数据保存在 carpet.Results 列表中的不同条目中。
我也试过 属性
public List<string> CarpetResults { get; set; }
并在构造函数中实例化它
public IndexModel(ILogger<IndexModel> logger)
{
_logger = logger;
CarpetResults = new List<string>();
}
但每次页面加载后它仍会重置。
我建议你使用数据库来实现这个,每次页面加载。它从数据库中读取数据,所以它不会在每次页面加载后重置。
因为你没有提供足够的代码,所以我只能写一个简单的demo来展示。
//I use this simple class to create the database
public class Carpet
{
public int Id { get; set; }
public int Area { get; set; }
public int Cost { get; set; }
//this property will save the "Room area xx sqm $ xx"
public string Text { get; set; }
}
然后在PageModel
//this property will show results in page
[BindProperty]
public List<Carpet> carpets { get; set; }
//this property will pass data from page to controller
[BindProperty]
public Carpet carpet { get; set; }
public IActionResult OnGet()
{
carpets = _context.carpets.ToList();
return Page();
}
public async Task<IActionResult> OnPostAsync(Carpet carpet)
{
if (ModelState.IsValid)
{
//........your code
carpet.Text = "Room area " + carpet.Area + "sqm $" + carpet.Cost;
_context.carpets.Add(carpet);
}
return Page();
}
在页面中,您可以使用@foreach(xx)
获取List<Carpet>
中的项目,然后在页面上显示它们
@*your page code*@
<h1>results</h1>
@foreach (var item in @Model.carpets)
{
<div>
<h5>@item.Area</h5>
<h5>@item.Cost</h5>
<h5>@item.Text</h5>
</div>
}
我只是写了一个简单的demo,你可能需要加上你的css和js。也可以使用session来实现, 不过我觉得还是用数据库比较方便。