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来实现, 不过我觉得还是用数据库比较方便。