【问题标题】:Blazor binding variable issueBlazor 绑定变量问题
【发布时间】:2020-03-25 03:07:20
【问题描述】:

在我的 Blazor 项目中,我有一个简单的输入文本框,我想在其中绑定产品价格值。价格最初计算为:

PackageObject.Price = PackageObject.PackageProducts.Sum(x => x.Product.Price * x.Qty);

然后我将变量绑定到文本框:

<input class="form-control" type="text" @bind="@PackageObject.Price" placeholder="Package Price" />

这里的目标是将初始值设置为计算值,然后允许用户使用文本框进行更改。

但是,我根本无法更改值!假设计算出的价格是 800,我想将其更改为其他任何值,它立即将值更改回 800!

我假设由于计算,它与对象相关联。在不改变对象自己的基础定价的情况下,这个计算的价格将始终反映计算的结果。但我随后将其更改为使用类似的变量;

var price = PackageObject.PackageProducts.Sum(x => x.Product.Price * x.Qty);

然后我将变量@price 绑定到文本框,同样的事情。我无法通过使用我最初计算的值设置文本框然后让用户根据需要更改它来找到一种方法。

请帮忙。

谢谢!

弗兰克

【问题讨论】:

    标签: asp.net asp.net-core blazor


    【解决方案1】:

    OnInitializedOnInitializedAsync方法中设置值:

    protected override void OnInitialized()
    {
        PackageObject.Price = PackageObject.PackageProducts.Sum(x => x.Product.Price * x.Qty);
    }
    

    【讨论】:

      【解决方案2】:

      我已尝试重现您的问题,但如果没有完整的代码回购,我无法确定哪里出了问题,也无法接受您的结论。下面是一个运行良好的代码 sn-p,并按预期更新 PackageObject.Price 字段。请注意,计算发生在仅发生一次的 OnInitialized 生命周期方法中,也许这就是我的示例可以正常工作的原因。但我并不完全确定。

      用法

       <input class="form-control" type="text" @bind="@_PackageObject.TotalPrice" 
         placeholder="Package Price" />
       <input type="button" @onclick="@(() => { })" value="Refresh page"/>
      
       <p>@_PackageObject.TotalPrice</p>
      
       @code
       {
      
          PackageObject _PackageObject = new PackageObject();
      
         protected override void OnInitialized()
        {
          _PackageObject.ID = 1;
          _PackageObject.TotalPrice = _PackageObject.PackageProducts.Sum(p => 
           p.Price * p.Qty);
      
          Console.WriteLine(_PackageObject.TotalPrice);
      
        }
      
      
      
       public class PackageObject
       {
          public int ID { get; set; }
          public int TotalPrice { get; set; }
          public List<Product> PackageProducts { get; set; } =
                     Enumerable.Range(1, 5).
           Select(i => new Product { ID = i, Price = 50, Qty=10 }).ToList();
       }
      
      
      
       public class Product
       {
          public int ID { get; set; }
          public int Price { get; set; }
          public int Qty { get; set; }
       }
      } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-02
        • 2016-01-03
        • 2011-08-15
        • 1970-01-01
        • 1970-01-01
        • 2020-12-10
        相关资源
        最近更新 更多